2014-01-20 5 views
9

zu erstellen, verwende ich fopen("aaa\bbb\ccc\myfile.txt","w"), um Ausgabedatei zu erstellen. Aber die Ordner aaa, bbb und ccc existiert nicht. Was ist der beste Weg, um dieses Problem zu lösen? Gibt es eine Standardmethode, fopen zu bitten, alle benötigten Ordner zu erstellen?Um alle benötigten Ordner mit fopen

+7

Nein, 'fopen' nie Verzeichnisse machen. Es gibt eine [Frage mit guten Antworten bereits] (http://stackoverflow.com/questions/2336242/recursive-mkdir-system-call-on-unix/11425692) über eine erweiterte 'mkdir()', die mehrere Ebenen macht, die ist ähnlich wie du willst. Sie müssten das mehrstufige mkdir auf '" aaa/bbb/ccc/"' machen und 'fopen' aufrufen. –

+1

Für Windows könnten Sie Informationen in diesem Beitrag http://stackoverflow.com/questions/2834737/creating-new-folders-if-they-dont-exist-for-fopen verwenden – alexJones

+1

Denken Sie daran, diese Backslashes zu verdoppeln, im Allgemeinen das ist . Wird nicht mit dem Problem helfen, da 'fopen()' einfach das Erstellen von Verzeichnissen nicht unterstützt, aber * wenn * die Verzeichnisse existierten, wäre es notwendig. – unwind

Antwort

-1

fopen() wird verwendet, um Eingabestreams für Text- oder Binärdateien und nicht für die Verzeichnisdateien zu öffnen. Wenn Sie Ihre Datei in einem Pfad geöffnet haben möchten, der nicht existierende Verzeichnisse enthält, würde ich vorschlagen, dass Sie die mkdir() -Methode der Headerdatei /sys/stat.h verwenden. Sobald Sie die Verzeichnisse bereit haben, können Sie fopen() verwenden, um die benötigte Datei zu öffnen (oder sie zu erstellen, falls sie nicht bereits vorhanden ist). Dies ist der Ansatz, den ich verwendet, um eine Datei in dem ein Verzeichnis meiner $ HOME Ordner zu erstellen: -

char* home_dir= getenv("HOME"); 
/*creates the directory with specified modes*/ 
mkdir(strcat(home_dir, "/make-a-note/"),S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); 
/*used the strcat() to generate the file-path.*/ 
personal_work=fopen(strcat(home_dir,"personal_work.txt"),"a+"); 
+0

Verwenden Sie diesen Code nicht, der 'strcat()' Aufruf ist böse: Er überschreibt definitiv den Puffer, der den Inhalt der Umgebungsvariablen enthält. Dieses undefinierte Verhalten wird wahrscheinlich eine oder mehrere andere Umgebungsvariablen zerstören oder schlimmer. – cmaster

Verwandte Themen