鱼C论坛

 找回密码
 立即注册
查看: 304|回复: 3

[已解决]WriteString

[复制链接]
发表于 2023-7-28 10:36:01 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1.         CStdioFile mfile;//创建文件对象
  2.         //CStdioFile是CFile的子类
  3.        
  4.         BOOL b= mfile.Open(_T("D:\\测试.txt"), CFile::modeCreate| CFile::modeNoTruncate| CFile::modeReadWrite| CFile::typeUnicode,NULL);//打开文件
  5.        
  6.         CString str;
  7.         bool b1=mfile.ReadString(str);//读取一行文本
  8.         /*
  9.         参数1:CString& rString 对 CString 对象的引用,该对象将在函数返回时包含字符串
  10.         返回值:在没有读取任何数据的情况下到达文件尾,则为 FALSE
  11.        
  12.         包含\r,读完之后移动文件指针

  13.         注意:CStdioFile::ReadString()函数默认将文本文件视为ANSI编码进行读取
  14.                         如果是Unicode就加上CFile::typeUnicode
  15.         */

  16.         b1 = mfile.ReadString(str);//读取一行文本

  17.         mfile.WriteString(_T("888"));//写入一行
  18.         /*
  19.         参数:LPCTSTR lpsz  指定指向包含以 null 结尾的字符串的缓冲区的指针
  20.         终止空字符 (\0) 不会写入文件。 此方法会将 lpsz 中的换行符作为回车-换行符对写入文件中
  21.         */

  22.         mfile.WriteString(_T("999"));


  23.         mfile.Close();//关闭文件
复制代码



我的问题:WriteString函数没有写入


最佳答案
2023-7-28 10:36:49
根据你提供的代码,你使用了CStdioFile类的WriteString函数来向文件写入一行文本。但问题是你在调用WriteString函数后发现文件没有被写入。

有几个可能导致这种情况的原因:

1. 文件没有成功打开:在打开文件之前,确保目标文件D:\\测试.txt存在并且可写。你可以检查Open函数的返回值b,如果为FALSE,表示文件打开失败。

2. 文件指针位置不正确:在调用WriteString函数之前,确认文件指针指向了你期望的位置。可以尝试在调用WriteString函数之前使用SeekToEnd函数将文件指针移动到文件末尾。

3. 字符串写入失败:确保你要写入的字符串是有效的,并且没有被其他地方修改。你可以在调用WriteString函数之前打印输出要写入的字符串,以确认其内容正确无误。

以下是修改后的示例代码,用于检查和解决这些问题:

  1. CStdioFile mfile; // 创建文件对象
  2. BOOL b = mfile.Open(_T("D:\\测试.txt"), CFile::modeCreate | CFile::modeNoTruncate | CFile::modeReadWrite | CFile::typeUnicode, NULL); // 打开文件
  3. if (!b) {
  4.     AfxMessageBox(_T("文件打开失败")); // 弹出错误消息框
  5.     return;
  6. }

  7. CString str;
  8. bool b1 = mfile.ReadString(str); // 读取一行文本
  9. if (!b1) {
  10.     AfxMessageBox(_T("读取文件失败")); // 弹出错误消息框
  11.     mfile.Close();
  12.     return;
  13. }

  14. b1 = mfile.ReadString(str); // 读取一行文本
  15. if (!b1) {
  16.     AfxMessageBox(_T("读取文件失败")); // 弹出错误消息框
  17.     mfile.Close();
  18.     return;
  19. }

  20. mfile.SeekToEnd(); // 将文件指针移动到文件末尾

  21. mfile.WriteString(_T("888")); // 写入一行

  22. mfile.WriteString(_T("999"));

  23. mfile.Close(); // 关闭文件
复制代码


通过对上述问题的检查和修正,希望你能成功地使用WriteString函数向文件写入内容。如果你有任何其他问题,请随时提问。我会尽力帮助你解决。
如果问题已经解决,请设置最佳答案
1111.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-7-28 10:36:19 | 显示全部楼层
问题分析:

根据提供的代码,似乎在调用  mfile.WriteString(_T("888"))  和  mfile.WriteString(_T("999"))  后,并没有成功将字符串写入文件。这可能由于以下几个原因导致:

1. 文件打开失败:在打开文件时,如果出现问题,后续的写入操作将无法执行。

2. 文件定位错误:如果文件指针没有正确定位到预期位置,写入操作可能会失败。

3. 文件写入出错:在写入文件时,可能会发生错误导致写入失败。

让我们逐步检查代码并找出问题所在。

解决方法:

首先,我们需要确保文件成功打开,然后再尝试写入数据。我们可以添加一些错误检查代码来帮助定位问题。

修改代码如下:

  1. CStdioFile mfile; // 创建文件对象

  2. // CStdioFile 是 CFile 的子类

  3. BOOL b = mfile.Open(_T("D:\\测试.txt"), CFile::modeCreate | CFile::modeNoTruncate | CFile::modeReadWrite | CFile::typeUnicode, NULL); // 打开文件

  4. if (b)
  5. {
  6.     // 文件成功打开
  7.     CString str;
  8.     bool b1 = mfile.ReadString(str); // 读取一行文本

  9.     /*
  10.     参数1:CString& rString 对 CString 对象的引用,该对象将在函数返回时包含字符串
  11.     返回值:在没有读取任何数据的情况下到达文件尾,则为 FALSE
  12.     包含\r,读完之后移动文件指针

  13.     注意:CStdioFile::ReadString() 函数默认将文本文件视为 ANSI 编码进行读取
  14.             如果是 Unicode 就加上 CFile::typeUnicode
  15.     */

  16.     if (b1)
  17.     {
  18.         // 读取成功
  19.         b1 = mfile.ReadString(str); // 读取一行文本

  20.         // 如果再次读取成功,说明文件指针已经移动到下一行
  21.         // 现在我们可以尝试写入数据
  22.         if (b1)
  23.         {
  24.             // 尝试写入数据
  25.             mfile.WriteString(_T("888")); // 写入一行

  26.             // 注意:这里不需要再次读取数据,因为写入操作会移动文件指针到文件末尾

  27.             mfile.WriteString(_T("999"));

  28.             // 成功写入数据后,我们可以关闭文件
  29.             mfile.Close(); // 关闭文件
  30.         }
  31.         else
  32.         {
  33.             // 无法再次读取数据,写入前的读取操作可能出现问题
  34.             // 在这里添加适当的错误处理代码
  35.         }
  36.     }
  37.     else
  38.     {
  39.         // 读取失败,可能是文件为空或无法读取文件内容
  40.         // 在这里添加适当的错误处理代码
  41.     }
  42. }
  43. else
  44. {
  45.     // 文件打开失败
  46.     // 在这里添加适当的错误处理代码
  47. }
复制代码


通过这些修改,我们增加了对文件打开和读取操作的错误检查。请注意,如果在读取后再次尝试写入,不需要再次调用  ReadString ,因为写入操作会将文件指针移动到文件末尾。同时,您也可以根据实际情况在失败的情况下添加适当的错误处理代码。

请尝试运行修改后的代码,如果仍然遇到问题,请提供更多关于出错情况的信息,以便我们更进一步地帮助您解决问题。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-28 10:36:49 | 显示全部楼层    本楼为最佳答案   
根据你提供的代码,你使用了CStdioFile类的WriteString函数来向文件写入一行文本。但问题是你在调用WriteString函数后发现文件没有被写入。

有几个可能导致这种情况的原因:

1. 文件没有成功打开:在打开文件之前,确保目标文件D:\\测试.txt存在并且可写。你可以检查Open函数的返回值b,如果为FALSE,表示文件打开失败。

2. 文件指针位置不正确:在调用WriteString函数之前,确认文件指针指向了你期望的位置。可以尝试在调用WriteString函数之前使用SeekToEnd函数将文件指针移动到文件末尾。

3. 字符串写入失败:确保你要写入的字符串是有效的,并且没有被其他地方修改。你可以在调用WriteString函数之前打印输出要写入的字符串,以确认其内容正确无误。

以下是修改后的示例代码,用于检查和解决这些问题:

  1. CStdioFile mfile; // 创建文件对象
  2. BOOL b = mfile.Open(_T("D:\\测试.txt"), CFile::modeCreate | CFile::modeNoTruncate | CFile::modeReadWrite | CFile::typeUnicode, NULL); // 打开文件
  3. if (!b) {
  4.     AfxMessageBox(_T("文件打开失败")); // 弹出错误消息框
  5.     return;
  6. }

  7. CString str;
  8. bool b1 = mfile.ReadString(str); // 读取一行文本
  9. if (!b1) {
  10.     AfxMessageBox(_T("读取文件失败")); // 弹出错误消息框
  11.     mfile.Close();
  12.     return;
  13. }

  14. b1 = mfile.ReadString(str); // 读取一行文本
  15. if (!b1) {
  16.     AfxMessageBox(_T("读取文件失败")); // 弹出错误消息框
  17.     mfile.Close();
  18.     return;
  19. }

  20. mfile.SeekToEnd(); // 将文件指针移动到文件末尾

  21. mfile.WriteString(_T("888")); // 写入一行

  22. mfile.WriteString(_T("999"));

  23. mfile.Close(); // 关闭文件
复制代码


通过对上述问题的检查和修正,希望你能成功地使用WriteString函数向文件写入内容。如果你有任何其他问题,请随时提问。我会尽力帮助你解决。
如果问题已经解决,请设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-28 14:53:03 | 显示全部楼层
666
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-2 06:17

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表