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

标签 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() 不包含文件名,因此它不会工作。

正确的做法是这样写:

重命名(C:\\Users\\blah\\blah\\filename.exe, C:\\Users\\blah\\newdir\\filename.exe);

我正在做的是:

重命名(C:\\Users\\blah\\blah\\filename.exe, C:\\Users\\blah\\newdir);

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

最佳答案

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

  1. 使用find_last_of( link ) 查找ss 中最后一个\ 的位置。
  2. 通过substr( link )获取文件名。
  3. 将文件名粘贴到 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

关于c++ - 将文件移动到另一个目录而不在目标目录中指定文件名的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31373402/

相关文章:

c++ - 创建一个使用 4 位编码表示整数 0 -9 的文件

c++ - std::set<classtype>.find(element) 是否使用类中的 == 运算符来比较元素?

c++ - 成员变量作为默认参数?

git - 如何对移动/重命名的文件进行 git diff?

linux - 在Linux中删除文件夹中所有文件的文件名的特定部分(第二个破折号之后的内容)

c++ - 在对象中使用或不使用 'this'

c++ - __memcpy_ssse3() 段错误

java - 无法将 MP3 文件移动到其他文件夹

regex - 如何将多个文件名中的一部分从 1 更改为 01?

windows - 批量删除文件名中特定字符前后的文本