2015-04-02 183 views
1

如果在我的應用程序上單擊了複選框,指定文件夾中具有相同前點名稱的所有文件(例如TESTCRC32.xxx)將被重新命名。如果文件名是別的,(例如Pic.jpg),這個文件將不會被重命名。重命名具有相同名稱但擴展名不同的文件

我該怎麼辦?我正在考慮一個for循環...

void SecondDlg::OnTickBox() 
{ 

    // Add code here... 

    CString oldFile = myPath.Left(myPath.ReverseFind(_T('.'))); 

    rename(oldFile, newFile); 
} 
+0

你應該檢查'rename'返回的是什麼,如果它是'-1'則意味着有錯誤,你應該檢查錯誤是什麼。在這種情況下,通過它非常簡單:「舊文件名」實際上是「myPath」。如果您在調試器中逐步完成代碼,您會很快發現這一點。 – 2015-04-02 10:48:06

+0

感謝Joachim,我只是想知道,如果我執行此操作,將重命名具有相同名稱的所有文件,或者是否需要實現for循環來循環它們。 – RN24 2015-04-02 10:49:59

回答

1

你做錯了。讓我們一個例子,假設myPath是有路徑"C:\abc\xyz.bmp"
這一行後:

CString oldFile = myPath.Left(myPath.ReverseFind(_T('.'))); 

現在:

oldFile = "C:\\abc\\xyz"; // extension removed 

最後,您呼叫rename

rename(oldFile, newFile); //you can use myPath instead of oldFile 

由於oldFile = "C:\abc\xyz";和是不是正確的路徑,所以它不是renamimg文件。
你應該傳遞文件的完整路徑(C:\ abc \ xyz.bmp)。

+0

謝謝......問題是我想重命名所有具有相同名稱的文件......但是我得到了一個共享違規錯誤......我如何在它們共享相同名稱時重命名它們? – RN24 2015-04-02 11:07:45

+0

所以,你想重命名具有相同名稱但擴展名不同的文件爲單個名稱?你能提供一個輸入文件名和輸出文件名的例子嗎? – 2015-04-02 11:10:22

+0

示例輸入文件:TESTCRC32.txt,TESTCRC32.jpeg等被更改爲TEST42.txt,TEST42.jpeg當tickbox被選中時...我不斷收到共享衝突,因爲我正在運行的應用程序正在使用這些文件同一時間......任何方式圍繞此..? – RN24 2015-04-02 11:16:22

相關問題