鱼C论坛

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

[已解决]WriteString

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

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

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

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

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

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

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

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


        mfile.Close();//关闭文件


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


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

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

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

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

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

以下是修改后的示例代码,用于检查和解决这些问题:
CStdioFile mfile; // 创建文件对象
BOOL b = mfile.Open(_T("D:\\测试.txt"), CFile::modeCreate | CFile::modeNoTruncate | CFile::modeReadWrite | CFile::typeUnicode, NULL); // 打开文件
if (!b) {
    AfxMessageBox(_T("文件打开失败")); // 弹出错误消息框
    return;
}

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

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

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

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

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

mfile.Close(); // 关闭文件

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

使用道具 举报

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

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

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

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

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

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

解决方法:

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

修改代码如下:
CStdioFile mfile; // 创建文件对象

// CStdioFile 是 CFile 的子类

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

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

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

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

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

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

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

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

            // 成功写入数据后,我们可以关闭文件
            mfile.Close(); // 关闭文件
        }
        else
        {
            // 无法再次读取数据,写入前的读取操作可能出现问题
            // 在这里添加适当的错误处理代码
        }
    }
    else
    {
        // 读取失败,可能是文件为空或无法读取文件内容
        // 在这里添加适当的错误处理代码
    }
}
else
{
    // 文件打开失败
    // 在这里添加适当的错误处理代码
}

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

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

使用道具 举报

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

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

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

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

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

以下是修改后的示例代码,用于检查和解决这些问题:
CStdioFile mfile; // 创建文件对象
BOOL b = mfile.Open(_T("D:\\测试.txt"), CFile::modeCreate | CFile::modeNoTruncate | CFile::modeReadWrite | CFile::typeUnicode, NULL); // 打开文件
if (!b) {
    AfxMessageBox(_T("文件打开失败")); // 弹出错误消息框
    return;
}

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

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

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

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

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

mfile.Close(); // 关闭文件

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

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-20 18:03

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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