2013-01-06 33 views
5

Im nuovo a C e sto avendo problemi con l'uso di chdir(). Uso una funzione per ottenere l'input dell'utente, quindi creo una cartella da questo e cerco di chdir() in quella cartella e creo altri due file. Ovunque quando provo ad accedere alla cartella tramite finder (manualmente) non ho permessi. Comunque qui c'è il mio codice per questo, qualche consiglio?Cambiare la directory di lavoro in 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

Questa riga è piuttosto strana: 'int chdir (char * accountType);' – lbonn

risposta

5

in realtà non cambiamento directory, basta dichiarare un prototipo di funzione per chdir. Quindi si continua a confrontare tale puntatore a funzione su zero (che è lo stesso di NULL), motivo per cui non funziona.

È necessario includere il file di intestazione <unistd.h> per il prototipo, e poi effettivamente chiamata la funzione:

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

Quindi, se non ti dispiace, mi chiedo come posso passare alla directory accountType e creare i due file che seguono nel codice? Scusa Sono nuovo a C. =/e grazie per la risposta. –

3
int chdir(char *accountType); 

non chiama la funzione, tenta seguente codice invece:

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"); 
} 

anche, la linea printf sembra sospetta, penso che tu voglia sia print accountType stringa:

printf("%s\n", accountType); 
Problemi correlati