调用 CFile::Flush() 方法试验一下。

解决方案 »

  1.   

    to dcz(dcz):
    楼上这位兄弟能详细点吗?
      

  2.   

    某些文件输入输出类将文件读写 Cache 在内存,并没有真实的写入到磁盘上面。
    因此需要调用 CFile::Flush() 函数执行刷新功能。CFile::Flush 
    virtual void Flush( );
    throw( CFileException );ResForces any data remaining in the file buffer to be written to the file. The use of Flush does not guarantee flushing of CArchive buffers. If you are using an archive, call CArchive::Flush first.ExampleSee the example for CFile::SetFilePath.CFile Overview |  Class Members |  Hierarchy Chart
    --------------------------------------------------------------------------------
    Send feedback to MSDN.Look here for MSDN Online resources. 
      

  3.   

    我想实现的功能是把本地机上的几个文件传到网络上另一台机子,本地的这几个文件同时也是由其它程序时时更新的,以下是我复制文件的代码能帮我看一下吗?
    void CMainFrame::SendFile(LPCTSTR srcFile,LPCTSTR destFile)
    {
    CFile src,dest;
    BY_HANDLE_FILE_INFORMATION srcFileInformation;
    src.Open(srcFile,CFile::modeRead|CFile::shareDenyNone|CFile::typeBinary);
    dest.Open(destFile,CFile::modeReadWrite|CFile::shareDenyNone|CFile::typeBinary|CFile::modeCreate|CFile::modeNoTruncate);
        GetFileInformationByHandle((HANDLE)src.m_hFile,&srcFileInformation); src.SeekToBegin();
    dest.SeekToBegin(); UINT dwRead=0;
    while(dwRead<srcFileInformation.nFileSizeLow)
    {
    byte* data=new byte[1024];
    memset(data,0,1024); UINT dw=src.Read(data,1024);
    dest.Write(data,dw);
    dwRead+=dw;
    } src.Close();
    dest.Close();
    }
      

  4.   

    to whatapig:
    能帮我说说如果没锁会发生什么情况吗?
      

  5.   

    在读写文件的两个程序中建立一个同名的 CMutex 对象,这是一种 Windows 排它访问对象。
    在访问文件前锁住这个对象,访问完成后解锁这个对象。如果文件复制仍然出现你所说的问题,则该寻找其它原因。
      

  6.   

    to dcz(dcz):
    但是另一个程序不是我写的啊,能帮我介绍一份相关的资料或书吗?
      

  7.   

    All you need is in MSDN -- http://msdn.microsoft.com/default.asp.
      

  8.   

    在索引中输入 CFile, CMutex 等就可以找到不少你需要的材料了。建议将 MSDN 完全安装到机器上面(三张光盘)
      

  9.   

    要是多台计算机同时读写,MUTEX就不行了。我是在同目录下创建一个临时文件标识由程序正在写入。