2016-05-12 12 views
0

Wie kann ich einen Ordner und eine Datei innerhalb des vom Benutzer angegebenen Ordners erstellen?C Erstelle Datei und Ordner, die vom Benutzer angegeben werden

dieser Teil meiner Funktion ist:

char* folder = *(argv + 2); //"C:\\Users\\User\\Desktop\\New folder"; 
if (!(log = fopen("folder\\file.txt", "a")))// checking if there is any problem with the file 
    { 
     printf("The log file has not created correctly, closing the program\n"); 
     system("PAUSE"); 
     exit(1); 
    } 
+0

können Sie eine String-Variable in Dateioperationen übergeben. Erstellen Sie den Pfad und den Dateinamen in einer Zeichenfolge, und übergeben Sie sie dann an den Dateiaufruf. –

+0

@Johnelemans OP ist in C, also keine "Strings" – BackDoorNoBaby

+0

@ ariel20 Wie wird das Verzeichnis vom Benutzer an Sie weitergegeben? Ist es ein 'char *'? – BackDoorNoBaby

Antwort

1

Entweder verstehe ich Ihre Frage nicht, oder es ist zu einfach. Nehmen wir an, es ist zu einfach. Dann können Sie das tun wie:

char filename[1024]; 
FILE *logfp; 
sprintf(filename, "%s\\file.txt", argv[2]); 
if ((logfp=fopen(filename,"w")==NULL) { 
    //...error etc. 

Hinweis: Dies setzt voraus, dass alle Verzeichnisse im Pfad vorhanden sind.

+0

Wenn Sie mit Benutzereingaben umgehen, sollten Sie wirklich *** 'snprintf()' verwenden! – alk

1

Nicht sicher, wie Sie die Argumente an den Befehl übergeben. Dies setzt voraus, dass der Benutzer nur ein Argument eingibt, das den Pfad zu der Datei darstellt, die erstellt werden soll.

#include<stdio.h> 
#include<stdlib.h> 
#include<string.h> 

int main(int argc,char* argv[]) 
{ 
     char string[100]={'\0'}; 
     FILE* fp; 
     if(argc==2) 
      snprintf(string,(size_t)100,"%s\\filename",argv[1]); 
     else{ 
      printf("Usage : .\\executable_name \"path\""); 
      exit(-1); 
     } 
     fp=fopen(string,"a"); # Opening file in append mode. 
     if (fp==NULL){ 
       printf("Can't create file"); 
       exit(-1); 
     } 
     else{ 
       fprintf(fp,"%s","teststring\n"); 
     } 
     fclose(fp); 
     return 0; 
} 

Run dieses als:

.\executable_name "C:\Users\SomeUser" 
+0

Wenn Sie mit Benutzereingaben umgehen, sollten Sie *** wirklich 'snprintf()' verwenden! – alk

+0

@alk: eingearbeitet: D. Nebenbei frage ich mich noch, was wäre eine sinnvolle Zeichenbeschränkung für die Ordnertiefe in Windows? – sjsam

+1

Im Allgemeinen würde ich für "MAX_PATH" auf Windows und (versuchen Sie es) für "PATH_MAX" auf UNIX gehen, letzteres kann jedoch kompliziert werden, wenn Sie versuchen, durch die Natur der verschiedenen IX'ish Betriebssysteme umherzuhalten. Vielleicht möchten Sie die Antworten auf diesem http://stackoverflow.com/q/833291/694576 warum lesen. Bitte beachten Sie auch den feinen Unterschied zwischen einer maximalen Pfadlänge und der maximalen Länge eines Dateinamens. – alk