如何在C++中重命名文件?如何使用wstring重命名文件?
rename(tempFileName.c_str(), tempFileName.c_str()+"new.txt");
但tempFileName
是std::wstring
類型。但rename()
函數只接受const char*
參數。
如何在C++中重命名文件?如何使用wstring重命名文件?
rename(tempFileName.c_str(), tempFileName.c_str()+"new.txt");
但tempFileName
是std::wstring
類型。但rename()
函數只接受const char*
參數。
當Visual Studio
工作,你平時用的寬字符串的工作。爲了重命名文件,你可以使用MoveFileEx
-function,你可以像這樣重命名文件。
std::wstring newFilename = tempFileName.c_str();
newFilename += _T("new.txt");
if(!MoveFileEx(tempFileName.c_str(), newFilename.c_str(), flags)){
//error handling if call fails
}
查看here的文檔。
'MoveFileEx'需要'const(w)char *'。 LPTCSTR被定義爲'const char *',但我同意使用臨時對象可能有點困難。 – 2013-03-22 11:32:11
@ bash.d請確保您下次發佈正確的內容。這應該是預計從某人近2k代表 – 2013-03-22 11:54:01
行。調試101:如果發生了奇怪的事情,請將問題分開。您正在組裝一個fileSpec,因此您可能已經引入了一個'fileSpec'臨時文件,並在嘗試重命名之前將規範組裝到該文件中。用調試器檢查溫度時,你會發現這是不正確的。 – 2013-03-22 12:00:50
由於您的目標是Windows,因此請使用_wrename()
函數。
在Visual C++中,rename()的寬字符版本是_wrename()。這不是可移植的,但你可能不關心這一點。此外,您不能添加原始字符串的指針一樣,你想是這樣的(未測試):
std::wstring newName(tempFileName);
newName += L"new.txt";
_wrename(tempFileName.c_str(), newName.c_str());
但無法重命名文件返回錯誤代碼32 EPIPE – TVSuser1654136 2013-03-22 13:30:26
剛剛嘗試了一個快速示例,它在這裏工作。猜測你要重命名的文件不存在,或者你正在重命名的文件已經存在 - 有時間做一些調試。 – DavidK 2013-03-22 14:55:23
值得注意的是,EPIPE被定義爲32,這也是Windows錯誤代碼ERROR_SHARING_VIOLATION的值(「進程無法訪問文件,因爲它正在被另一進程使用。」)這很可能是它不起作用的原因對於你 - 你已經在其他地方打開了該文件。 – DavidK 2013-03-22 14:58:05
'tempFileName.c_str()+「new.txt」'顯然是錯誤的。 – wilx 2013-03-22 11:29:21