在 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 文件的主要内容,如果未能解决你的问题,请参考以下文章