我想写一个.txt文件
比如在一个循环中写进123456
文件写完之后打开
显示为:
1
2
3
4
5
6
CFile file;
CString sFile(m_sFileName);
if( !file.Open(sFile, CFile::modeCreate |
CFile::modeReadWrite))
{
WARNING_MESSAGE);
return false;
}
file.SeekToEnd();  
file.Write(&dResult, sizeof(double));  //写文件
file.Write("\n",2); 
file.Close();
我这样写的,可是为什么看的时候总是二进制啊。

解决方案 »

  1.   

    file.Write(&dResult, sizeof(double));  //写文件
    这句话错了。你把dResult这个数值型变量的地址写到文件中了,当然是二进制样子。
    应该将dResult转换为字符串。然后才能写到文件中
    CString str;
    str.Format("%f",dResult);
    然后,file.Write(str,sizeof(doulbe);
      

  2.   

    如果你是写入Double类型的 1 2 3 4 5 6 ,那肯定是二进制啦
    要是写入char 类型的'1' '2' '3' '4' '5' '6'不就是字符型的PS:'1'=0x31     .......        '6'=0x36
      

  3.   

    你的dResult是double型,当然写进去是二进制了,你应该先转换成字符串
    CFile file;
    CString sFile(m_sFileName);
    if( !file.Open(sFile, CFile::modeCreate |
    CFile::modeReadWrite))
    {
    WARNING_MESSAGE);
    return false;
    }
    file.SeekToEnd();  
             char buf[20];
             sprintf(buf, "%d\n", (int)dResult);
             file.Write(buf, strlen(buf));
    file.Close();
      

  4.   

    请看我的代码:
    CStdioFile file;
    CString strFile(m_sFileName);
    if( !file.Open(sFile, CFile::modeCreate |
    CFile::modeReadWrite))
    {
    WARNING_MESSAGE);
    return false;
    }
    else
    {
    for(int i = 1;i < 7;i ++)
    {
       CString strContent;
       strContent.Format("%d\n",i);
       file.WriteString(strContent);
    }
    file.Close();
    }
      

  5.   

    这样能够换行马? file.Write("\n",2); 在就是"%d\n",写成这样,我怎么不能换行呢?
      

  6.   

    CString str;
    str.Format("%f\n",dResult);CFile file;
    CString sFile(m_sSimuResultFileName);
    if( !file.Open(sFile, CFile::modeCreate |CFile::modeReadWrite))
    {
    return false;
    }
    file.SeekToEnd();  //需要加这个马?
    file.Write(str, sizeof(double));  //写文件
    file.Close();
    return true;我这样写怎么还是不行呢?不能够换行,每次都是把前一个数据给覆盖掉了。
      

  7.   

    在VC中,换行要写成\r\n。光\n不行。SeekToEnd可以不要,因为你的文件是个空文件嘛。
    你这段语句不是在循环中吧???如果是,那么文件的打开方式错了。CFile::modeCreate代开方式是不管你有没有这个文件,都会新建一个文件的。如果原先有的话,则会清空。应该用CFile::modeCreate|CFile::modeNoTruncate,这样的话,如果文件已经存在,则不会创建新文件了,将打开已经存在的文件。然后你用file.SeekToEnd应该可以正确写进去了。
      

  8.   

    ofstream out("name.txt");for (int i = 1; i <= 6; i++)
    {
        out << i << "\n";
    }
      

  9.   

    需要 fstream.h  头文件
      

  10.   

    我是这么写的,没有问题。
    double d[2];
    d[0] = 1.2343;
    d[1] = 233.343;
    for(int i=0;i<2;i++)
    {
    CFile file;
    file.Open("C:\\abc.txt",CFile::modeCreate|CFile::modeNoTruncate|CFile::modeWrite);
    file.SeekToEnd();
    CString str;
    str.Format("%f\r\n",d[i]);
    file.Write(str,str.GetLength());
    file.Close();
    }
      

  11.   

    改成CFile file;问号消失了。我用的是CStdioFile file;结果就出现了问号请问为什么?
      

  12.   

    happyparrot(快乐鹦鹉)请问为什么呢?
    期待你的出现。
      

  13.   

    应该这样写:(指定文件的打开方式:CFile::typeText)

    if( !file.Open(sFile, CFile::modeCreate|CFile::typeText|CFile::modeReadWrite)
      

  14.   

    CFile::typeText不行,子类才可以这样。
      

  15.   

    按你的做法,我写成这样,也是正确的。
    double d[2];
    d[0] = 1.2343;
    d[1] = 233.343;
    for(int i=0;i<2;i++)
    {
    CStdioFile file;
    file.Open("C:\\abc.txt",CFile::modeCreate|CFile::modeNoTruncate|CFile::modeWrite);
    file.SeekToEnd();
    CString str;
    str.Format("%f\r\n",d[i]);
    file.Write(str,str.GetLength());
    file.Close();
    }
      

  16.   

    我明白了。用CStdioFile时,回车换行只要用\n就可以了。因为这中文件类好像用流写的。象C中一样,\n就代表回车换行了。我试过了。没有问题了。
    double d[2];
    d[0] = 1.2343;
    d[1] = 233.343;
    for(int i=0;i<2;i++)
    {
    CStdioFile file;
    file.Open("C:\\abc.txt",CFile::modeCreate|CFile::modeNoTruncate|CFile::modeWrite);
    file.SeekToEnd();
    CString str;
    str.Format("%f\n",d[i]);
    file.WriteString(str);
    // file.Write(str,str.GetLength());
    file.Close();
    }