我正在将Visual Studio 15 2017与v141_xp工具集配合使用,以编译Windows XP的Win32应用程序。该应用程序可以在Windows 10和XP上正常运行,但是运行某些Windows API命令,例如_chdir
和_mkdir
(或CreateDirectory
)似乎无法正常工作:该目录不正确已创建,或者对于_chdir
,应用程序不会更改其工作目录。
我以为问题是名称中带有空格的路径,但我不确定是这种情况。我在需要的地方在字符串中正确使用了\\
和"\""
,但是在处理这样的路径时,它似乎可以在XP中工作,但不能在10中使用,或者可以在10中工作,但不能用于XP。>
我希望代码在两者上都能正常工作。我还缺少其他兼容性问题吗?
谢谢。
更多信息
由于可移植性要求,我正在使用/ MTd'多线程调试'进行编译。似乎在编译CRT时可能会遇到一些问题。
答案 0 :(得分:0)
事实证明,该错误与stat
有关,并在此处进行了更多描述:
Visual C++ 2015 express: _stat not working on Windows XP
我的应用程序正在对文件或目录使用此存在性测试,多年来,这是一种方便的跨平台解决方案:
return (stat(path.c_str(), &st) == 0);
但是,如果您使用较新的工具集为Windows XP进行编译,则stat
现在已损坏,您必须使用Windows API,如:
return (GetFileAttributes(path.c_str()) != INVALID_FILE_ATTRIBUTES);