2013-01-06 15 views
5

Jestem nowy w wersji C i mam problemy z używaniem funkcji chdir(). Używam funkcji, aby uzyskać dane wejściowe od użytkownika, a następnie utworzę z tego folder i spróbuję użyć chdir() w tym folderze i utworzyć dwa kolejne pliki. Kiedy próbuję uzyskać dostęp do folderu za pomocą wyszukiwarki (ręcznie) Nie mam uprawnień. W każdym razie tutaj jest mój kod do tego, wszelkie wskazówki?Zmienianie katalogu roboczego w C?

int newdata(void){ 
    //Declaring File Pointers 
    FILE*passwordFile; 
    FILE*usernameFile; 

    //Variables for 
    char accountType[MAX_LENGTH]; 
    char username[MAX_LENGTH]; 
    char password[MAX_LENGTH]; 

    //Getting data 
    printf("\nAccount Type: "); 
    scanf("%s", accountType); 
    printf("\nUsername: "); 
    scanf("%s", username); 
    printf("\nPassword: "); 
    scanf("%s", password); 

    //Writing data to files and corresponding directories 
    umask(0022); 
    mkdir(accountType); //Makes directory for account 
    printf("%d\n", *accountType); 
    int chdir(char *accountType); 
    if (chdir == 0){ 
     printf("Directory changed successfully.\n"); 
    }else{ 
     printf("Could not change directory.\n"); 
    } 

    //Writing password to file 
    passwordFile = fopen("password.txt", "w+"); 
    fputs(password, passwordFile); 
    printf("Password Saved \n"); 
    fclose(passwordFile); 

    //Writing username to file 
    usernameFile = fopen("username.txt", "w+"); 
    fputs(password, usernameFile); 
    printf("Password Saved \n"); 
    fclose(usernameFile); 

    return 0; 


} 
+1

Ta linia jest dość dziwna: 'int chdir (char * accountType);' – lbonn

Odpowiedz

5

Ty nie faktycznie zmiany katalogu, wystarczy zadeklarować prototyp funkcji dla chdir. Następnie porównuje się wskaźnik funkcji z zerem (który jest taki sam jak NULL) i dlatego nie działa.

należy dołączyć plik nagłówkowy <unistd.h> dla prototypu, a następnie faktycznie połączenia funkcję:

if (chdir(accountType) == -1) 
{ 
    printf("Failed to change directory: %s\n", strerror(errno)); 
    return; /* No use continuing */ 
} 
+0

Więc jeśli nie przeszkadza mi, że pytam, w jaki sposób mogę zmienić katalog accountType i utworzyć dwa pliki, które następują w kodzie? Przykro nam, jestem nowy w C. =/i dziękuję za odpowiedź. –

3
int chdir(char *accountType); 

nie jest wywołanie funkcji, spróbuj następującego kodu:

mkdir(accountType); //Makes directory for account 
printf("%d\n", *accountType); 
if (chdir(accountType) == 0) { 
    printf("Directory changed successfully.\n"); 
}else{ 
    printf("Could not change directory.\n"); 
} 

również, linia printf wygląda podejrzanie, myślę, że chcesz, jest print accountType ciąg:

printf("%s\n", accountType); 
Powiązane problemy