做图像处理方面的编程,想把数组中的数据写入txt文件中进行查看,用到时如下代码:
CString filename;
CFile myfile(_T("imageGrayinfo.txt"),CFile::modeWrite|CFile::modeCreate);
filename=myfile.GetFilePath();
CArchive ar1(&myfile,CArchive::store);
m=0;
for(int x=0;x<picWidth;x++)
        {
  for(int y=0;y<picHeight;y++)
               {
filename.Format(_T(" %d"),imageGray[m++]);//数据存放在imageGray数组中,定义为imageGray = (BYTE*)malloc(sizeof(BYTE)*picWidth*picHeight);
        ar1<<filename;
}
filename.Format(_T("\n"));
ar1<<filename;
}
myfile.Close();得到的txt文件中数组数据时正确的,但是会有一些奇怪的符号,如下
Ͽ255Ͽ255Ͽ255Ͽ255Ͽ255Ͽ255Ͽ255Ͽ255Ͽ255Ͽ255Ͽ255Ͽ255
ǿ0ǿ0ǿ0ǿ0Ͽ255ǿ0ǿ0Ͽ255ǿ0ǿ0ǿ0ǿ0ǿ0ǿ0ǿ0ǿ0ǿ0ǿ0Ͽ255Ͽ255Ͽ255Ͽ255Ͽ255Ͽ255Ͽ255ǿ0ǿ
255与255之间、0与0之间的符号是什么?如何产生的?如何消除?
求解答

解决方案 »

  1.   

    windows 文件 换行 是 “\r\n”
    linux   才 是 "\n"
      

  2.   

    这个是对CString进行了序列化:
    ar1<<filename;
    而不是仅仅写入CString里面的字符串。CString的序列化会先写入字符串长度,你用16进制查看器看一下就知道了。所以改成:
    ar1<<(LPCTSTR)filename;
    或:
    ar1<<(LPCTSTR)filename.GetBuffer();
    filename.ReleaseBuffer();
    即可。
      

  3.   

    Unicode方法来保存
      

  4.   

    还是不行啊,txt中有数据但是看不到,一片空白。
      

  5.   

    我按照这样试了一下,貌似不行啊?不知楼主现在问题解决了没?楼主的问题没解决呢,期待解答。。啊,那就用ar.WriteString()方法,序列化的看看CArchive类就可以了呀。其实你这里没必要用CArchive类,直接用myfile.Write就可以嗄。
      

  6.   

    楼上说的对,直接用CFile::Write写入字符串即可。
    也可以用CStdioFile来打开文件,用CStdioFile::WriteString写入更方便,换行都不用你自己处理了,它自动处理
      

  7.   

    我改变策略,用一下最简单的方式搞定了。FILE *fp=fopen("imageinfo.txt","w");
    n=0;
    for(i=0;i<Pic.GetWidth();i++)
    {
    for(j=0;j<Pic.GetHeight();j++)
    {
    if(imageResult[n] == 0)
    fprintf(fp,"0");
    else
    fprintf(fp,"1");
    n++;
    }
    fprintf(fp,"\n");
    }
    fclose(fp);但是乱码的问题依然没有解决,欢迎大家继续讨论。
      

  8.   


    int picWidth  = 10;
    int picHeight = 10;
    BYTE* imageGray = (BYTE*)malloc(sizeof(BYTE)*picWidth*picHeight);
    memset(imageGray, 0x01, sizeof(BYTE)*picWidth*picHeight);
        CString filename;
        CFile myfile(_T("imageGrayinfo.txt"),CFile::modeWrite|CFile::modeCreate);
        filename =myfile.GetFilePath();
        CArchive ar1(&myfile,CArchive::store);
        int m=0;
        for(int x=0;x<picWidth;x++)
        {
          for(int y=0;y<picHeight;y++)
          {
            filename.Format(_T(" %d"),imageGray[m++]);//数据存放在imageGray数组中,定义为imageGray = (BYTE*)malloc(sizeof(BYTE)*picWidth*picHeight);
            ar1.Write(filename.GetBuffer(1), filename.GetLength());
          }
          filename.Format(_T("\r\n"));
          ar1.Write(filename.GetBuffer(1), filename.GetLength());
        }
    ar1.Close();
        myfile.Close();