2014-02-15 16 views
5

Ich habe ein grundlegendes Programm, das entworfen wurde, um die Funktionalität von bash cp Befehl zu kopieren. Ich entwickle eine Kopie für UNIX und für Windows. Meine UNIX-Version funktioniert gut, aber ich finde, dass Windows keine Unterstützung für die „wx“ Modus-Option für fopen(), wie in der folgenden Zeile:Alternative zu fopen() 's Modus "wx" für Windows fopen()?

file2 = fopen(argv[2], "wx");

Gibt es eine Alternative Möglichkeit, den wx-Funktionalität-Modus für fopen hier zu spiegeln?

(wx ermöglicht eine Datei mit Schreibzugriff zu öffnen, wird aber einen Fehler, wenn eine Datei mit dem gleichen Dateinamen zurückgeben bereits vorhanden ist - das heißt, Sie werden die vorhandene Datei nicht außer Kraft setzen here Siehe

Note..: Sie versuchen, das Programm in Developer Eingabeaufforderung für VS2013

+1

Wenn 'fopen' kann es nicht tun, können Sie die native Win32' CreateFile' Funktion mit 'CREATE_ALWAYS' als' dwCreationDisposition' Argument verwenden. –

+0

@AndrewMedico 'CREATE_NEW'. – BLUEPIXY

+0

'Datei2 = PathFileExists (Argv [2])? NULL: fopen (argv [2], "w"); ' – BLUEPIXY

Antwort

3

die kurze Antwort zu laufen ist, dass Sie nicht „wx“ oder eine gleichwertige, dass ein CREATE_NEWCreateFile mit nachgeben fopen passieren kann. fopen einfach übernimmt keine Parameter-Kombination, dass zu erhalten - Es ist sehr begrenzt, Sie können den Quellcode selbst im Visual Stu für fopen sehen dio CRT-Code-Basis!

Sie können jedoch CreateFile direkt aufrufen. Dies ist wahrscheinlich der beste Ansatz.

Alternativ können Sie _open (http://msdn.microsoft.com/en-us/library/z0kc8e3z.aspx) aufrufen, die den Parameter nehmen _O_EXCL die CREATE_NEW nachgeben kann und somit bewirkt, dass es zum Scheitern verurteilt, wenn die Datei vorhanden ist, wie Sie wollen.

Vom CRT:

case _O_CREAT | _O_EXCL: 
case _O_CREAT | _O_TRUNC | _O_EXCL: 
    filecreate = CREATE_NEW; 
    break; 
+0

Verwenden von' _open' mit '_O_EXCL' und dann [' _fdopen'] (http://msdn.microsoft.com/en- us/library/dye30d82.aspx) sollte in Ordnung sein ... Auf diese Weise können die Standard-Dateiausgabefunktionen immer noch anstelle des '_write'-Primitivs verwendet werden. –