我在程序里使用copyfile,奇怪的是这个函数只能正常运行一次,再使用第二次时,打算把上次一copy的文件再覆盖一遍,就会失败。为什么会这样呢?是不是刚写入的文件有保护?我已经在函数里指定要覆盖了。谢谢。

解决方案 »

  1.   

    用GetLastError
    检查一下什么错误
      

  2.   

    没有显性的打开文件,使用api完成的文件copy,程序很简单,如下,结果copyfile那一句只能正常执行一次。
    bool CRj02Dlg::Copy2Temp(CString str)
    {
    CString tempfile;
    tempfile=m_path+"res\\temp.mp3";//将要生成的目标文件名::CopyFile(str,tempfile,FALSE);//str是源文件名return true;
    }
      

  3.   

    m_path是什么东西,用绝对路径试试。有可能是copyfile之后系统的当前路径改变了
      

  4.   

    m_path是程序所在路径。要将文件拷贝到程序所在目录的res目录下,
    所以m_path+"res\\temp.mp3"。
    程序一直使用绝对路径。源文件路径也是绝对路径,所以可能不是这个问题。我想可能是文件没有释放的问题,因为程序运行着,晾了一会儿,再试就好了,但紧接着再试又不行了。说明有什么东西占用了temp.mp3这个文件。我不太明白,msdn里没有说copyfile会占用一会儿文件,我自己的程序也并没有占用这个文件。完全没有道理的。对了,文件拷贝过去后,会立刻通过一个html文件播放(使用htmlview)。但我认为,html播放后应该就释放了吧,会不会是它把文件占住了。如果是的话,怎么让html文件释放呢?我已经用refresh2试过了,没用。