C++ 文件写入函数

C++ 文件写入函数,c++,mfc,cfiledialog,cfile,C++,Mfc,Cfiledialog,Cfile,我有一个关于MFC CFile写入函数的问题 我正在学习MFC应用程序,并一直坚持使用这个“另存为”和“写入”功能。 当我单击TestButton时,会弹出另存为对话框,提示保存为txt文件 void CLearnDlg::OnBnClickedButtonTest() { CString m_strPathName; char* File; TCHAR szFilters[] = _T ("Text files (*.txt)¦*.txt¦All files (*.*)¦*.*¦¦"

我有一个关于MFC CFile写入函数的问题
我正在学习MFC应用程序,并一直坚持使用这个“另存为”和“写入”功能。 当我单击TestButton时,会弹出另存为对话框,提示保存为txt文件

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"));
}
void CLearnDlg::OnBnClickedButtonTest()
{
CString m_strPathName;
字符*文件;
TCHAR szFilters[]=
_T(“文本文件(*.txt)△txt△所有文件(*.*)△txt△所有文件”);
CFileDialog dlg(FALSE,_T(“txt”),_T(“*.txt”),
OFN_覆盖比较,szFilters);
if(dlg.DoModal()==IDOK)
m_strPathName=dlg.GetPathName();
CFile数据文件(m_strPathName,CFile::modeReadWrite | CFile::modeCreate);
char buffer0[100]=“TEST0”;
char buffer1[100]=“TEST1”;
int GetLength;

对于(inti=0;i实际上,如果代码是正确的,那么您的编程语句

File = (("%S, %S\n\n"), buffer0, buffer1);
唯一的意思是,首先用buffer0创建文件字符数组,然后用buffer1替换它,这样最后您将得到buffer1作为最终文件值

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

所以你的最后一个计划可能看起来像

      // 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();
}
//TODO:在此处添加控件通知处理程序代码
CString m_strPathName;
字符*文件;
TCHAR szFilters[]=
_T(“文本文件(*.txt)△txt△所有文件(*.*)△txt△所有文件”);
CFileDialog dlg(FALSE,_T(“txt”),_T(“*.txt”),
OFN_覆盖比较,szFilters);
if(dlg.DoModal()==IDOK)
m_strPathName=dlg.GetPathName();
CFile数据文件(m_strPathName,CFile::modeReadWrite | CFile::modeCreate);
char buffer0[100]=“TEST0”;
char buffer1[100]=“TEST1”;
int GetLength;
File=newchar[strlen(buffer0)+strlen(buffer1)+2];
对于(int i=0;i>
GetLength=strlen(文件);
Write(File,GetLength);
}
DataFile.Close();
MessageBox(_T(“OK”));

谢谢,代码是有效的。但是如果我想在
文件=newchar….
中添加第三个值,这是一个
双精度
我该怎么做?比如>>双精度,buffer0,buffer1>
TEST0,TEST1
@Ashton请在编辑后查看更新的代码,你会得到你需要的。非常感谢!!但是对于双精度,我不应该使用
%lf
??@Ashton取决于您想要的字符的大小和数量。这意味着如果您想要大的浮点数,那么您应该通过%lf,否则%f就足够了。好的!非常感谢!由于您的帮助,我们已经提前完成了此项目!再次感谢您!
    // 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"));