在 C++ 中将数据写入由 CFileDialog 创建的 .txt 文件

Posted

技术标签:

【中文标题】在 C++ 中将数据写入由 CFileDialog 创建的 .txt 文件【英文标题】:Write data into .txt file created by CFileDialog, in C++ 【发布时间】:2010-05-06 16:22:02 【问题描述】:

我想用 C++ 将数据写入 CFileDialog 创建的 .txt 文件中。

我面临的问题是下面的代码不起作用,尽管没有构建错误。由于某种原因,无法找到 CFileDialog 创建的 .txt 文件。代码有什么问题?

的有效方法是什么?

谢谢

CFileDialog dlg(FALSE, NULL, NULL, OFN_OVERWRITEPROMPT,
    _T("My Data File (*.txt)|*.txt||"));
if(dlg.DoModal() != IDOK)
     return;
CString filename = dlg.GetPathName();
ofstream outfile (filename);
int mydata = 10;
outfile << "my data:" << mydata << endl;
outfile.close();

【问题讨论】:

欢迎来到 Stack Overflow。请阅读***.com/editing-help,它将帮助您正确格式化您的问题。 感谢您收拾残局。我将遵循建议的格式。 你是否尝试调试,“文件名”变量中有什么? 是CFileDialog生成的test.txt文件的全路径 【参考方案1】:

为什么在使用 MFC 时尝试使用 ofstream?你可以使用 CFile 不是吗?您使用 ofstream 的任何具体原因?

【讨论】:

没有规定必须独占使用 MFC。就我个人而言,我喜欢尽可能使用 C++ 标准,并且只在更有意义的地方使用 MFC 特定的东西。例如,我几年前就停止使用 CArray。 是的,将 MFC 与 Ofstream 混合在一起看起来真的很难看。你是对的,我可以使用 CFile。我尝试 Ofstream 的唯一原因是它看起来很简单。好吧,这不是一个好主意。 标准 C++ 中是否有与 CFileDialog 等效的部分?谢谢 @younevertell,标准 C++ 不包含 任何 GUI 功能。所以答案是否定的。 Mark..有一个叫做GetopenFileName的函数,它是一个win32函数,几乎等同于CFileDialog......对吗?【参考方案2】:

在不知道某些设置的情况下,我只能做一个合格的猜测。

例如取决于您如何编译它,UNICODE 或 !UNICODE CString 的行为不同,即映射到 Etiher CStringA 或 CStringW。 CString 的行为也因 MFC 版本而异,在某些情况下有一个运算符可以隐式转换为 c 字符串,而在某些情况下则没有。

ofstream 通常需要一个 const char* 作为参数,因此您可能需要将其更改为

ofstream outfile(filename.GetBuffer(255)); 

在那种情况下。

编辑:

您是否检查过是否可以打开该文件?从上面的代码看来你假设成功了......

if ( outfile.is_open() )
...

【讨论】:

CStringA 会自动转换为 const char* 指针,因此无需使用 GetBuffer。 Microsoft 的 ofstream 将在构造函数中使用 const char* 或 const wchar_t*,因此任何 CString 变体都可以工作。 是的,正如我所说,它在旧版本的 MFC 版本之间有所不同,因此没有自动转换,所以为了安全起见(因为我不知道 OP 是什么版本的 MFC使用)我用 GetBuffer 给出了建议

以上是关于在 C++ 中将数据写入由 CFileDialog 创建的 .txt 文件的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C++ 中将 stl::string 写入 HDF5 文件

在 C++ 中将字节写入 ofstream

在 Python 中将二进制数据写入文件

在 CFileDialog (MFC) 中设置文件夹视图

如何在 C++ 中将 LPOLESTR 转换为 char*

在 C++ 中将指针转换为数组形式的问题?