我想打开一个文件,然后另存为另外一个文件,不知怎么现实?两个文件的路径可以不同。速度不要太慢,我写了以下代码,但运行结果不对,令存为的文件比原来的大很多,不知道是什么原因?还有就是怎么读取另存为对话框里用户选择的文件类型? thanks!
我不会用CArchive这个类。
void CPictureConverterDlg::SavePicture(LPCTSTR oldPathName, LPCTSTR newPathName)
{
CFile sFile,dFile;
if(!sFile.Open(oldPathName,CFile::modeRead | CFile::shareDenyWrite))
{
MessageBox("Can not open file",_T("Warning"));
return;
}
CArchive arRead(&sFile, CArchive::load);
if(!dFile.Open(newPathName,CFile::modeCreate | CFile::modeWrite | CFile::shareExclusive))
{
MessageBox("Can not create file",_T("Warning"));
return;
}
CArchive arStore(&dFile, CArchive::store);
DWORD FileSize=sFile.GetLength();
WORD temp;
for(DWORD i=0;i<FileSize/2;i++)
{
arRead>>temp;
arStore<<temp;
}
arRead.Close();
arStore.Close();
sFile.Close();
dFile.Close();
}

解决方案 »

  1.   

    WORD temp; =====> BYTE temp;
    用WORD是两个字节两个字节的读,碰到原文件为奇数字节数的时候就不对了
      

  2.   

    还有 for(DWORD i=0;i<FileSize/2;i++) ====>for(DWORD i=0;i<FileSize;i++)
             BYTE temp;
    for(DWORD i=0;i<FileSize;i++)
    {
    arRead>>temp;
    arStore<<temp;
    }标准另存为对话框用法:
    CString   filename;   
    char   szFileters[]="save   files   (*.txt)|*.txt|ALL   files   (*.*)|*.*||";   
    CFileDialog   opendlg   (FALSE,"txt","*.txt",OFN_OVERWRITEPROMPT,szFileters,this);   
    if   (opendlg.DoModal()==IDOK){   
    filename=opendlg.GetPathName();  //获取文件名 
    }
      

  3.   

    不需要对数据进行处理的话可以直接使用CopyFile