在VC遇到需要对文件进行自我复制的情况,但是编译中出现了奇怪的程序无法脱离编译环境的问题具体表现:程序在编译器下一切正常,包括release/debug,但是离开编译器后无法找到自身并读取。问题代码段
//...Function to get file name
char* GetFileName(void)
{
 char* filename;
 filename=new char[MAX_LENGTH];
 memset(filename,0,MAX_LENGTH];
 
 GetModuleFileName(NULL,filename,MAX_LENGTH); return filename;
}//...Function to copy itself
bool Copy(const char* filename,const char* tarname)
{
 ifstream fin;
 ofstream fout; fin.open(filename,ios::binary);
 fout.open(tarname,ios::trunc|ios::binary);
 
 try
 {
  if(fin.fail())
  {
   throw "Unable to read";
   return false;
   }
  if(fout.fail())
  {
   throw "Unable to write";
   return false;
   }
 }
 catch(char* tmp)
 {
   cout<<tmp<<endl;
   system("pause");
  }
  //....其他代码
  return true;
}
  在编译器调试的时候没有遇到任何问题,包括对自身进行复写或者复制到其他位置但是离开编译环境之后就遇到无法读取自身的问题,很困惑。

解决方案 »

  1.   

    路径问题吧,编译器环境下编译运行的当前路径是工程文件路径不是Debug/Release下的exe程序的路径
      

  2.   

    这个我倒是知道,但是用GetModuleFileName获得的路径应该没问题吧?难道是\\的问题?
      

  3.   

    GetMobuleFileName返回相应模块的路径,   换GetCurrentDirectory试试
      

  4.   

    如果你是杂DLL中用,它和在EXE中是不一样的
      

  5.   

    不是DLL而是直接用在exe里面。另回复4楼:
    GetCurrentDirectory获得的是当前程序所在文件夹,但是无法获得文件名……