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

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

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

在 C++ 中将数据写入由 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。请阅读stackoverflow.com/editing-help,它将帮助您正确格式化您的问题。
  • 感谢您收拾残局。我将遵循建议的格式。
  • 你是否尝试调试,“文件名”变量中有什么?
  • 是CFileDialog生成的test.txt文件的全路径

标签: c++ visual-c++ mfc


【解决方案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 给出了建议
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-08
  • 2016-03-02
  • 1970-01-01
相关资源
最近更新 更多