使用ofstream或fstream open不会出错并且不会打开文件

时间:2015-02-20 16:05:29

标签: c++ visual-studio-2012 mfc atl mbcs

使用Visual Studio 2012&与项目属性:

  1. 配置属性:常规:项目默认值:字符集: 未设置
  2. 配置属性:C ++:语言:将WChar_t视为内置 类型:否
  3. 我使用了一个包含以下代码段的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。

2 个答案:

答案 0 :(得分:1)

正如其他人指出您的问题是由转义字符\引起的。

"c:\data\test.txt"

应该是

"c:\\data\\test.txt"

您可以找到有关转义序列here的更多信息。

为避免混淆,您可以在文件路径中使用/代替\

"C:/data/test.txt"

答案 1 :(得分:0)

对于仍在关注此事的人,经过两天半的时间,我确实深入了解了正在发生的事情。很抱歉发布此邮件的延迟。实际上,我完全忘记了它。

这是父目录的访问权限。不只是定期拒绝。我的意思是特别拒绝打开要添加到其中的文件(使用append打开)。除非您在文件或目录属性窗口的安全选项卡上转到高级模式,否则您通常无法正常查看这些设置。即便如此,你还需要做一些额外的步骤。因此,我的文件所在目录上方的目录已设置此设置(出于某种令人难以置信的原因)。无论如何,我 验证了所有三种方法现在都有效(fopen()CFile.open()stream.open())。

感谢所有的想法,我学到了很多以前我都不知道的。有些想法很棒。

Maddog