将文件移动到另一个目录而不在目标目录中指定文件名的方法?

时间:2015-07-12 22:58:40

标签: c++ file-rename

我需要一种方法将文件移动到另一个目录,而不必在目标目录中指定文件名。

TCHAR szFileName[MAX_PATH];
GetModuleFileName(NULL, szFileName, MAX_PATH);

wchar_t* Favfolder = 0;
SHGetKnownFolderPath(FOLDERID_Favorites, 0, NULL, &Favfolder);

wstringstream ss(szFileName);
wstringstream ff(Favfolder);

rename(ss.str(), ff.str()); //Won't work

如果我使用renameff.str()不包含文件名,那么它将无效。

正确的方法是写:

rename(C:\\Users\\blah\\blah\\filename.exe, C:\\Users\\blah\\newdir\\filename.exe);

我正在做的是:

rename(C:\\Users\\blah\\blah\\filename.exe, C:\\Users\\blah\\newdir);

但我无法想出在第二个例子中包含filename.exe的方法。

1 个答案:

答案 0 :(得分:1)

我假设您使用的是wstring,而不是wstringstream

  1. 使用find_last_oflink)查找\中最后ss的位置。
  2. substrlink)获取文件名。
  3. 将文件名粘贴到ff
  4. 的末尾

    修改 完成所有工作的功能:

    int move(const string &oldPath, const string &newDir)
    {
        const size_t pos = oldPath.find_last_of('\\');
        const string newPath = newDir + '\\' + (pos == string::npos ? oldPath : oldPath.substr(pos));
        return rename(oldPath.c_str(), newPath.c_str());
    }
    

    不幸的是,rename不支持wchar_t所以我必须使用string,而不是wstring