我需要一种方法将文件移动到另一个目录,而不必在目标目录中指定文件名。
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
如果我使用rename
,ff.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
的方法。
答案 0 :(得分:1)
我假设您使用的是wstring
,而不是wstringstream
。
find_last_of
(link)查找\
中最后ss
的位置。substr
(link)获取文件名。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