首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CFile写入函数

CFile写入函数
EN

Stack Overflow用户
提问于 2013-06-03 10:28:39
回答 1查看 5.6K关注 0票数 1

我有一个关于MFC CFile写函数的问题。

我正在学习MFC应用程序,并专注于这个“另存为”和“写”函数。当我单击TestButton时,会弹出一个另存为对话框,提示您另存为txt文件。

代码语言:javascript
复制
void CLearnDlg::OnBnClickedButtonTest()
{
CString m_strPathName;
char* File;
TCHAR szFilters[] = 
    _T ("Text files (*.txt)¦*.txt¦All files (*.*)¦*.*¦¦");

CFileDialog dlg (FALSE, _T ("txt"), _T ("*.txt"),
    OFN_OVERWRITEPROMPT, szFilters);

if (dlg.DoModal () == IDOK)
    m_strPathName = dlg.GetPathName();

CFile DataFile(m_strPathName, CFile::modeReadWrite | CFile::modeCreate);

char buffer0[100] = "TEST0";
char buffer1[100] = "TEST1";
int GetLength;


for (int i=0; i<2; i++)
{
    File = (("%S, %S\n\n"), buffer0, buffer1);
    GetLength = strlen(File);
    DataFile.Write(File, GetLength);
}
DataFile.Close();
MessageBox(_T("OK"));
}

问题是如何将两个缓冲区一起写入到单个File中,然后将其写入到DataFile中,并在每次写入时生成一个新行?

将保存输出文件,但只保存一个缓冲区(TEST1)两次,而不转到新行。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-03 12:54:00

实际上你的代码有问题如果你的代码是正确的,那么你的编程语句

代码语言:javascript
复制
File = (("%S, %S\n\n"), buffer0, buffer1);

只有一个意思,那就是首先用buffer0创建文件字符数组,然后用buffer1替换它,这样最后你就会得到buffer1作为最终的File值。

关于\n不能正常工作,因为它应该类似于\r\n

所以你的最终程序可能看起来像这样,

代码语言:javascript
复制
      // TODO: Add your control notification handler code here
    CString m_strPathName;
    char* File;
    TCHAR szFilters[] = 
        _T ("Text files (*.txt)¦*.txt¦All files (*.*)¦*.*¦¦");

    CFileDialog dlg (FALSE, _T ("txt"), _T ("*.txt"),
        OFN_OVERWRITEPROMPT, szFilters);

    if (dlg.DoModal () == IDOK)
        m_strPathName = dlg.GetPathName();

    CFile DataFile(m_strPathName, CFile::modeReadWrite | CFile::modeCreate);

    char buffer0[100] = "TEST0";
    char buffer1[100] = "TEST1";
    int GetLength;

    File = new char[strlen(buffer0)+strlen(buffer1)+2];
    for (int i=0; i<2; i++)
    {
        strcpy(File,buffer0);
        strcat(File,buffer1);
        strcat(File,"\r\n");
        GetLength  = strlen(File);
        DataFile.Write(File, GetLength);
    }
    DataFile.Close();
    MessageBox(_T("OK"));

    CDialogEx::OnOK();
}

编辑

代码语言:javascript
复制
    // TODO: Add your control notification handler code here
    CString m_strPathName;
    char* File;
    TCHAR szFilters[] = 
        _T ("Text files (*.txt)¦*.txt¦All files (*.*)¦*.*¦¦");

    CFileDialog dlg (FALSE, _T ("txt"), _T ("*.txt"),
        OFN_OVERWRITEPROMPT, szFilters);

    if (dlg.DoModal () == IDOK)
        m_strPathName = dlg.GetPathName();

    CFile DataFile(m_strPathName, CFile::modeReadWrite | CFile::modeCreate);

    char buffer0[100] = "TEST0";
    char buffer1[100] = "TEST1";
    int GetLength;

    File = new char[strlen(buffer0)+strlen(buffer1)+2];
    for (int i=0; i<2; i++)
    {
        double doublevalue;
        doublevalue = 1035.25414;
        sprintf(File,"%s,%s,%f\r\n", buffer0, buffer1,doublevalue);     //Dumping data string and double data saparated with comma
        GetLength = strlen(File);
        DataFile.Write(File, GetLength);
        sprintf(File,"%f>>>%s>>>%s\r\n", doublevalue,buffer1,buffer0);      //Dumping data double and string data saparated with >>
        GetLength = strlen(File);
        DataFile.Write(File, GetLength);
    }
    DataFile.Close();
    MessageBox(_T("OK"));
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16889300

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档