我的 C++ 应用程序没有正确地在文件上写入数据

Posted

技术标签:

【中文标题】我的 C++ 应用程序没有正确地在文件上写入数据【英文标题】:My c++ application doesn't write data on files correctly 【发布时间】:2013-01-15 09:43:50 【问题描述】:

我正在开发一个 C++ MFC 应用程序(使用 Visual Studio 2010)

我已编写此代码用于将数据存储在文件中(代码位于按钮单击事件中)

wfstream myfile;
myfile.open("ttt.txt");
if(!myfile)
    MessageBox(L"Problem");
else

    myfile <<"arash";
    myfile << ";program";
    myfile << ";test";
    myfile << ";a";
    MessageBox(L"OK");
myfile.close();


但是输出文件是:

arash;program;test;aحححححححححح

我不知道حححححححححح 是从哪里来的?!!!

我也试过了

myfile << _T("arash");
myfile << _T(";program");
myfile << _T(";test");
myfile << _T(";a");

但一切都没有改变

我该怎么办?

谢谢

【问题讨论】:

【参考方案1】:

您必须为文件输出提供宽字符串,因为它是一个宽字符文件:

myfile << L"arash";
myfile << L";program";
myfile << L";test";
myfile << L";a";

_T 宏不起作用的原因可能是您没有定义_UNICODE

【讨论】:

执行此操作后我遇到了同样的问题...,没有任何改变 @Arashdn 您在问题中显示的内容是您对文件所做的一切吗?你能做吗? SSCCE? @Arashdn 这与您如何显示文件无关?这使我自然而然地跟进,如何您如何显示文件内容? 我刚刚创建了一个新项目,它运行良好......我真的不知道当前项目有什么问题【参考方案2】:

除了使用L"something" 提供宽字符文字(因为这是一个宽字符流,您必须这样做)之外,文件可能已经包含来自先前操作的垃圾数据。

听起来您想在写入文件之前截断文件(删除所有现有数据)。你可以这样做

myfile.open("ttt.txt", ios_base::in | ios_base::out | ios_base::trunc);

【讨论】:

每次在测试应用程序之前,我都会删除 ttt.txt ,我也尝试过你的代码,但没有任何改变...... 您的项目是 UNICODE 还是 ANSI 项目?您能否发布在 zip 文件中重现此问题的完整项目?我无法通过 ANSI 构建重现您的问题(我没有尝试 UNICODE),一切对我来说都很好。

以上是关于我的 C++ 应用程序没有正确地在文件上写入数据的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C++ 中正确地在循环中使用互斥锁?

将压缩帧写入 mpeg4 块 c++

在 C++ 中通过迭代器将向量写入二进制文件的正确方法

如何在 Raspberry Pi 上使用 C++ 将接收到的 UDP 音频数据正确写入 ALSA

如何在Windows Property System中创建IconList属性?

让 C++ 程序写入文件 [关闭]