使用Visual Studio 2012&与项目属性:
我使用了一个包含以下代码段的ofstream: 注意:路径“C:\ data”对此示例有效
ofstream fexp;
fexp.open("c:\data\test.txt", ios::out|ios::binary|ios::app);
fexp << "writing some text to file with append in binary" << endl;
fexp.flush();
fexp.close();
如果文件不在目录中,则文件将打开,文本写入等。如果文件已存在,则文件未打开,未写入等。未发生异常且未找到错误代码(在errno)。在调试open()方法的内部时,我发现一些内部打开 调用试图将文件名字符串复制到wchar_t类型并退出,内部错误为13(查找MS常量=打开中止)。
MBCS已被弃用,所以我不想被设置为。只有其他选项是Unicode,它打破了我的一半更改。为什么我不能使用std io库?!!!
还有什么是奇怪的我仍然有一些工作第二次切换到no第一套到MBCS。代码在处理GUI控制器(如CEdit)时有很多地方工作,如果必须的话,我有很多多余的代码可以从CString转换为字符串。如果在本质上CString的表示是一个const char *,它有点接近LPCTSTR(不完全)。将应该>从CString转换为字符串有点“ SIMPLE ”。这不是因为我没有参与UTF-8和UTF-16之间切换的 UNECESSARY 并发症。我希望我的char能够 STRICTLY 1-BYTE 。
通过这种疯狂的最近路径是什么?我是否回到MBCS(即使已弃用)并更改所有容器方法 GetWindowText()以GetWindowTextA()为例或放弃在Visual Studio中使用流,或者是什么???
请告知,如果可以......任何帮助将不胜感激。感谢。
Maddog
ps:当我的产品不在亚洲或阿拉伯半岛销售时,请不要麻烦我转换为在我的代码中拥抱完整的Wide环境。
pps:最后一点,我进入了这个原因,因为我注意到我最初安装的Visual Studio 2012默认为MBCS。答案 0 :(得分:1)
正如其他人指出您的问题是由转义字符\
引起的。
"c:\data\test.txt"
应该是
"c:\\data\\test.txt"
您可以找到有关转义序列here的更多信息。
为避免混淆,您可以在文件路径中使用/
代替\
。
"C:/data/test.txt"
答案 1 :(得分:0)
对于仍在关注此事的人,经过两天半的时间,我确实深入了解了正在发生的事情。很抱歉发布此邮件的延迟。实际上,我完全忘记了它。
这是父目录的访问权限。不只是定期拒绝。我的意思是特别拒绝打开要添加到其中的文件(使用append打开)。除非您在文件或目录属性窗口的安全选项卡上转到高级模式,否则您通常无法正常查看这些设置。即便如此,你还需要做一些额外的步骤。因此,我的文件所在目录上方的目录已设置此设置(出于某种令人难以置信的原因)。无论如何,我
验证了所有三种方法现在都有效(fopen()
,CFile.open()
,stream.open()
)。
感谢所有的想法,我学到了很多以前我都不知道的。有些想法很棒。
Maddog