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

Way to move a file to another directory without specifying filename in destination directory?

我需要一种无需在目标目录中指定文件名即可将文件移动到另一个目录的方法。

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 的方法。

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

  1. 使用find_last_of(link)找到最后一个\ss.
  2. 中的位置
  3. 通过substr(link)获取文件名。
  4. 将文件名粘贴到 ff 的末尾。

编辑: 完成所有工作的函数:

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