将文件移动到另一个目录而不在目标目录中指定文件名的方法?
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
如果我使用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
的方法。
我假设您使用的是 wstring
,而不是 wstringstream
。
编辑:
完成所有工作的函数:
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
我需要一种无需在目标目录中指定文件名即可将文件移动到另一个目录的方法。
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
的方法。
我假设您使用的是 wstring
,而不是 wstringstream
。
编辑: 完成所有工作的函数:
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