是否真的可以使用 CFile 和 CStdio 类 将数据附加到 MFC 中的文本文件?
Is it really possible to append data to a text file in MFC's by using CFile and CStdio classes?
是否真的可以使用CFile
和CStdio
类将数据附加到MFC中的文本文件?如果可以,那怎么办??
我使用以下代码附加数据,但它只提供最新(最后输入的)数据。
UpdateData(TRUE);
CStdioFile file_object;//(L"D://Docs//Temp.txt",
CFile::modeCreate | CFile::modeReadWrite | CFile::modeRead);
CString str = L"D://Docs//Temp.txt";
CString fc1, fc2;
BOOL bFile = file_object.Open(str,
CFile::modeCreate | CFile::modeReadWrite | CFile::modeRead);
if (bFile)
file_object.Seek(file_object.GetLength(), CFile::end);
fc1.Format(L"%f", m_CelTemp);
file_object.WriteString(L"Temp in Celsius is:");
file_object.WriteString(fc1);
file_object.WriteString(L"\n");
fc2.Format(L"%f", m_FarTemp);
file_object.WriteString(L"Temp in Fahrenheit is:");
file_object.WriteString(fc2);
file_object.WriteString(L"\n");
UpdateData(FALSE);
首先,您 posted 无法编译,从第 3 行开始。请post真实代码。
最好的猜测是问题在于 CFile::modeCreate
,它“如果文件不存在则创建一个新文件。;如果文件已经存在,则引发 CFileException。 "(请参阅 CFile::CFile 处的参考文档)。您可能想要 CFile::modeNoTruncate
,即“open existing”。
您应该使用 CFile::SeekToEnd()
方法将文件指针的值设置为文件的逻辑末尾,以便追加数据。
这是一个例子:
CStdioFile f;
CString sDataToWrite(_T("Data\r\n"));
if(f.Open(_T("C:\Files\file.txt"), CFile::modeCreate | CFile::modeNoTruncate | CFile::modeWrite))
{
f.SeekToEnd();
f.WriteString(sDataToWrite);
}
f.Close();
这是您可以尝试的示例代码
CStdioFile file;
file.Open(_T("_FILE_PATH_HERE"),CFile::modeCreate|CFile::modeWrite|CFile::modeNoTruncate);
file.SeekToEnd();
file.WriteString(_T("Write Text Here\r\n")); // \r\n to move the cursor to the next line
file.Close();
CFile::modeCreate 如果文件不存在则创建一个新文件。;如果该文件已经存在,则引发 CFileException。
CFile::modeNoTruncate 如果文件不存在则创建一个新文件;否则,如果该文件已经存在,则将其附加到 CFile 对象。
CFile::modeWrite 只请求写权限。
file.SeekToEnd(); 将文件指针的值设置为文件的逻辑末尾。
是的,可以使用 CFile 和 CStdioFile 追加数据。
你必须使用
FileObj.Open(L"FileName.txt",CFile ::modeCreate | CFile::modeWrite | CFile::modeNoTruncate);
简单示例
CFile FileObj;
//CStdioFile FileObj;
// FileObj.Open(L"FileName.txt",CStdioFile ::modeCreate | CStdioFile::modeWrite | CStdioFile::modeNoTruncate);
FileObj.Open(L"FileName.txt",CFile ::modeCreate | CFile::modeWrite | CFile::modeNoTruncate);
FileObj.SeekToEnd();
CString Message = m_strName ; // Whetever Your Message
FileObj.Write(Message,Message.GetLength());
FileObj.Flush();
FileObj.Close();
是否真的可以使用CFile
和CStdio
类将数据附加到MFC中的文本文件?如果可以,那怎么办??
我使用以下代码附加数据,但它只提供最新(最后输入的)数据。
UpdateData(TRUE);
CStdioFile file_object;//(L"D://Docs//Temp.txt",
CFile::modeCreate | CFile::modeReadWrite | CFile::modeRead);
CString str = L"D://Docs//Temp.txt";
CString fc1, fc2;
BOOL bFile = file_object.Open(str,
CFile::modeCreate | CFile::modeReadWrite | CFile::modeRead);
if (bFile)
file_object.Seek(file_object.GetLength(), CFile::end);
fc1.Format(L"%f", m_CelTemp);
file_object.WriteString(L"Temp in Celsius is:");
file_object.WriteString(fc1);
file_object.WriteString(L"\n");
fc2.Format(L"%f", m_FarTemp);
file_object.WriteString(L"Temp in Fahrenheit is:");
file_object.WriteString(fc2);
file_object.WriteString(L"\n");
UpdateData(FALSE);
首先,您 posted 无法编译,从第 3 行开始。请post真实代码。
最好的猜测是问题在于 CFile::modeCreate
,它“如果文件不存在则创建一个新文件。;如果文件已经存在,则引发 CFileException。 "(请参阅 CFile::CFile 处的参考文档)。您可能想要 CFile::modeNoTruncate
,即“open existing”。
您应该使用 CFile::SeekToEnd()
方法将文件指针的值设置为文件的逻辑末尾,以便追加数据。
这是一个例子:
CStdioFile f;
CString sDataToWrite(_T("Data\r\n"));
if(f.Open(_T("C:\Files\file.txt"), CFile::modeCreate | CFile::modeNoTruncate | CFile::modeWrite))
{
f.SeekToEnd();
f.WriteString(sDataToWrite);
}
f.Close();
这是您可以尝试的示例代码
CStdioFile file;
file.Open(_T("_FILE_PATH_HERE"),CFile::modeCreate|CFile::modeWrite|CFile::modeNoTruncate);
file.SeekToEnd();
file.WriteString(_T("Write Text Here\r\n")); // \r\n to move the cursor to the next line
file.Close();
CFile::modeCreate 如果文件不存在则创建一个新文件。;如果该文件已经存在,则引发 CFileException。
CFile::modeNoTruncate 如果文件不存在则创建一个新文件;否则,如果该文件已经存在,则将其附加到 CFile 对象。
CFile::modeWrite 只请求写权限。
file.SeekToEnd(); 将文件指针的值设置为文件的逻辑末尾。
是的,可以使用 CFile 和 CStdioFile 追加数据。 你必须使用
FileObj.Open(L"FileName.txt",CFile ::modeCreate | CFile::modeWrite | CFile::modeNoTruncate);
简单示例
CFile FileObj;
//CStdioFile FileObj;
// FileObj.Open(L"FileName.txt",CStdioFile ::modeCreate | CStdioFile::modeWrite | CStdioFile::modeNoTruncate);
FileObj.Open(L"FileName.txt",CFile ::modeCreate | CFile::modeWrite | CFile::modeNoTruncate);
FileObj.SeekToEnd();
CString Message = m_strName ; // Whetever Your Message
FileObj.Write(Message,Message.GetLength());
FileObj.Flush();
FileObj.Close();