ps =  lsClientFile.GetHeadPosition();
ps2 = lsTempFile.GetHeadPosition();
while(ps)
{
s1 = lsClientFile.GetNext(ps);
s2 = lsTempFile.GetNext(ps2);
MoveFileEx(s2, s1, MOVEFILE_REPLACE_EXISTING);
                AfxMessageBox(s1);
                AfxMessageBox(s2);
}
上面lsClientFile和lsTempFile都是CStringList对象.s1,s2为CString类型.
  为何每次只有最后一个文件重命名成功?比如我在lsClientFile中加入test1.txt,test2.txt,test3.txt
lsTempFile也加入相应的文件名.如果就test3.txt正确的被重命名了,test1和test2根本就没动.如果换下它们顺序的话也是最后加入的那个被正确重命名.AfxMessageBox(s1)和AfxMessageBox(s2)都是正确的。应该是MoveFileEx的问题,当然我MoveFile也试过了,同样的结果。这是怎么回事啊?

解决方案 »

  1.   

    我测试了你的代码,当然我在前面加入把变量lsClientFile和lsTempFile中加入了我自己电脑上的三个文件的全路径和想要改成的新文件名的全路径,结果是正确的。
    也就是说,这段代码成功地将lsTempFile中的文件重命名为lsClentFile中对应的文件名。你可以这样
    if(MoveFileEx(s2,   s1,   MOVEFILE_REPLACE_EXISTING)) 
    判断一下,是不是每次改名返回都是成功呢,如果不成功
    GetLastError();
    看一下错误是什么。