我程序要实现的功能是:搜索d:根目录下的所有文件,然后在文件的后缀名加上"&"字符,把它复制在同一个目录下,复制文件我用的是API函数中的CopyFile(),复制根目录下的文件(如"d:\\hbb.txt\0")就出错,但复制根目录文件夹里的文件(如"d:\\hbb\\hbb.txt")却复制成功,下面附上我的源程序,请高手帮忙看看是什么回事??
Search_Directory()
{
long handle;
struct _finddata_t filestruct;
char path_search[_MAX_PATH];

handle = _findfirst("*", &filestruct);
if((handle == -1)) return;
if(::GetFileAttributes(filestruct.name) & FILE_ATTRIBUTE_DIRECTORY)
{
if( filestruct.name[0] != '.' )
{
_chdir(filestruct.name);
Search_Directory(szFilename);
_chdir("..");

}
else   //找到文件 
{
// 先获得当前工作目录的全路径
_getcwd(path_search,_MAX_PATH);
strcat(path_search,"\\");
strcat(path_search,filestruct.name);
Data_Change(path_search);    //复制文件,问题就出在这个函数里 } while(!(_findnext(handle,&filestruct)))
{
if( ::GetFileAttributes(filestruct.name) & FILE_ATTRIBUTE_DIRECTORY )
{
if(*filestruct.name != '.')
{
_chdir(filestruct.name);
Search_Directory(szFilename);
_chdir("..");
}
}
else
{
_getcwd(path_search,_MAX_PATH);
strcat(path_search,"\\");
strcat(path_search,filestruct.name);
Data_Change(path_search);
}

_findclose(handle);
// 最后结束整个查找工作
}Data_Change(char *Path_Name)
{
char pFrom[_MAX_PATH],pTo[_MAX_PATH];
strset(pFrom, '\0');
strset(pTo, '\0'); strcpy(pFrom, Path_Name);
strcpy(pTo, Path_Name);
strcat(pTo, "&"); CopyFile(pFrom, pTo, FALSE);
MessageBox("file copy finish");
}

解决方案 »

  1.   

    你的函数写的有问题不是CopyFile有问题
      

  2.   

    else   //找到文件 
    {
    // 先获得当前工作目录的全路径
    _getcwd(path_search,_MAX_PATH);
    strcat(path_search,"\\");
    strcat(path_search,filestruct.name);
    Data_Change(path_search);    //复制文件,问题就出在这个函数里 }一点可能: _getcwd 在根目录下时,返回格式是怎样的?
    "c:"还是"c:\\"?
      

  3.   

    to"everandforever(Forever)":
    我试过了,在根目录下执行_getcwd(path_search,_MAX_PATH)后path_search是"d:\",但执行了strcat(path_search,"\\")只有path_search就变成了"d:\\",为什么不是"d:\\\"???如何才能解决这个问题??
      

  4.   

    '\'为转义字符。
    判断path_search是否为根目录:
      char *str=strrchr(path_search,'\\');
      if(*(str++)=='\0')//根目录
        ........
      

  5.   

    '\\'这样的写法代表一个 \ 字符_getcwd(path_search,_MAX_PATH);
    if (path_search[strlen(path_search)] != '\\')
    strcat(path_search,"\\");
    strcat(path_search,filestruct.name);
    Data_Change(path_search);    //复制文件,问题就出在这个函数里
      

  6.   

    不会是CopyFile的问题。
    调用Data_Change前,查查参数的值。
      

  7.   

    _getcwd(path_search,_MAX_PATH);
    strcat(path_search,"\\");
    strcat(path_search,filestruct.name);
    Data_Change(path_search);   
    改成下面的
    _getcwd(path_search,_MAX_PATH);
    char c;
    c=path_search[strlen(path_search)-1];
    if(c!='\\')
    strcat(path_search,"\\");
    strcat(path_search,filestruct.name);
    Data_Change(path_search);   
      

  8.   

    to"everandforever(Forever)":
    我试过了,在根目录下执行_getcwd(path_search,_MAX_PATH)后path_search是"d:\",但执行了strcat(path_search,"\\")只有path_search就变成了"d:\\",为什么不是"d:\\\"???在C里面要用'\\'来代表'\'因为'\'代表转义字符
    建议你在 strcat(path_search,"\\") 之前判断一下 path_search 最后一个字符是不是'\\'(即'\')。如果是,就不用在后面加 '\'了。