替代fopen()的模式“WX”的Windows fopen()?

我有一个基本的程序,旨在复制bash的cp命令的function。 我正在为UNIX和Windows开发一个副本。 我的UNIX版本工作正常,但是,我发现Windows不支持fopen()的“wx”模式选项,如下所示:

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

有没有其他的方法来镜像wxfunction模式fopen在这里?

(wx允许打开具有写入权限的文件,但是如果具有相同文件名的文件已经存在,将返回一个错误 – 这意味着你不会覆盖现有的文件。

注意:试图在VS2013的Developer Command Prompt中运行程序

简单的答案是你不能传递“wx”或任何等价的fopen,这将产生CREATE_NEWCreateFilefopen根本不接受任何参数组合来产生 – 这是非常有限的。 您可以在Visual Studio CRT代码库中自己查看源代码!

不过,你可以直接调用CreateFile 。 这可能是最好的方法。

或者,您可以调用_openhttp://msdn.microsoft.com/en-us/library/z0kc8e3z.aspx ),它将采用参数_O_EXCL ,可以产生CREATE_NEW ,从而导致它失败,如果该文件存在,只要你想。

从CRT:

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