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

时间:2014-02-15 21:34:08

标签: c windows fopen mode

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

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

有没有另一种方法来镜像fopen的wx功能模式?

(wx允许打开具有写访问权限的文件,但如果已存在具有相同文件名的文件,则会返回错误 - 这意味着您不会覆盖现有文件。请参阅here

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

1 个答案:

答案 0 :(得分:3)

简短的回答是你无法通过" wx"或任何与fopen等效的产生CreateFileCREATE_NEWfopen根本不接受任何参数组合来产生 - 它非常有限。您可以在Visual Studio CRT代码库中自己查看fopen的源代码!

但是,您可以直接致电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;