/*CFile MyFile1("C:\\ori.txt",CFile::modeRead);
CFile MyFile2("C:\\test.txt",CFile::modeCreate|CFile::modeWrite);
    DWORD Length=MyFile1.GetLength();
char *p=new char[Length];
MyFile1.Read(p,Length);
MyFile2.Write(p,Length);
MyFile1.Close();
MyFile2.Close();
MessageBox(p,"File Copy Succeed",0);*/
FILE *File1;
FILE *File2;
File1=fopen("C:\\ori.txt","r");
File2=fopen("C:\\test.txt","w");
fseek(File1,0,SEEK_END);
int Length1=ftell(File1);
fseek(File1,0,0);
char *tmp=new char[Length1];
fread(tmp,sizeof(char),Length1,File1);
fwrite(tmp,sizeof(char),Length1,File2);
fclose(File1);
fclose(File2);
 
MessageBox(tmp,"File Copy Succeed",0);
ori.txt的内容是
zhen me hui
shi 
qing?
bu hao
yong ?
7456CFile写出来的就正常。
File的,写完了后面有好几个"屯"字

解决方案 »

  1.   

    cfile是用流方式写的,好像是不用写\r\n只写\n就可以回车换行,
    但FILE与HANDLE却都要写成\r\n才可以回车换行
    好像是用FILE读出来的比文件的长度小,是\r引起的原因不过读写都用一种方式就不会有问题
    还有cfile写文件的时候,好像如果进行自动换行就会出现位置不对现象
      

  2.   

    那怎么改FILE的?
    我不能用mfc
      

  3.   

    给你修改候的代码(FILE模式下打开文件用二进制方式打开"b"): CFile MyFile1("d:\\temp\\ori.txt",CFile::modeRead);
    CFile MyFile2("d:\\temp\\test.txt",CFile::modeCreate|CFile::modeWrite);
        DWORD Length=MyFile1.GetLength();
    char *p=new char[Length+1];
    MyFile1.Read(p,Length);
    MyFile2.Write(p,Length);
    MyFile1.Close();
    MyFile2.Close();
    p[Length] = 0;
    MessageBox(p,"File Copy Succeed",0);
    delete[Length+1] p;

    FILE *File1;
    FILE *File2;
    File1=fopen("d:\\temp\\ori.txt","rb");
    File2=fopen("d:\\temp\\test.txt","wb");
    fseek(File1,0,SEEK_END);
    int Length1=ftell(File1);
    fseek(File1,0,0);
    char *tmp=new char[Length1+1];
    fread(tmp,sizeof(char),Length1,File1);
    fwrite(tmp,sizeof(char),Length1,File2);
    fclose(File1);
    fclose(File2);
     
    tmp[Length1] = 0;
    MessageBox(tmp,"File Copy Succeed",0);
    delete[Length1+1] tmp;
      

  4.   

    HANDLE hFile = ::CreateFile(cmdPath, GENERIC_READ|GENERIC_WRITE, 0,
    NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 
    NULL);
    if(hFile == INVALID_HANDLE_VALUE)
    return FALSE; char *data = new char[2048];

    DWORD dw;
    int ret = ::ReadFile(hFile, data, 2048, &dw, NULL);
    if (!ret &&  dw == 0) 
    {
    delete []data;
    ::CloseHandle(hFile);
    return FALSE;
    } char *p = data;
    ::CloseHandle(hFile);
    HANDLE hFile = ::CreateFile(lpWritePath, GENERIC_READ|GENERIC_WRITE, 0,
    NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, 
    NULL);
    if(hFile == INVALID_HANDLE_VALUE)
    {
    TRACE("创建文件:%s失败\n", lpWritePath);
    return FALSE;
    }

    DWORD dw;
    ::WriteFile(hFile, m_szOuterCheckData, strlen(m_szOuterCheckData), &dw, NULL);
    ::WriteFile(hFile, pWriteData, nWriteLen, &dw, NULL);
    ::CloseHandle(hFile);
      

  5.   

    屯 好像是0xcc
    说明你的串没有结束标志 :\0