我嘗試處理這些情況,當我嘗試通過向文件名中添加加號來編寫已存在的文件時。簡而言之,就像Windows複製文件時所做的一樣。異常處理 - 如果它與原始文件存在,則使用另一個文件名編寫文件
假設我有一個文件test.bmp。我想對其應用過濾器並將過濾的圖像保存爲testout.bmp。但該文件夾中已存在testout.bmp,因此程序會捕獲該文件並將其保存爲testout(1).bmp例如。在我的代碼中,我嘗試使用exeptions。我的想法是這樣的:(僞代碼)
bool IMAGE_DATA::openFile(const char* filename)
{
int i = 0;
try
{
if(file_exists(filename)) throw whatever;
}
catch(type whatever)
{
changefilename(filename,i)
i++;
if(file_exists(filename)) /* throw whatever/do something */;
}
};
目前如果文件已經存在,我的程序只存在(當有文件夾中有該名稱的文件file_exists剛剛返回true)。
我開始用異常處理重新設計我的基函數,而不是在發生任何錯誤時簡單地返回false。我寫不管這裏因爲我會有更多的拋出(如果文件無法打開或存在,但與我的文件等相同)。
我該如何才能嘗試和趕上文件名,直到有一個文件名是正確的。或者有沒有更簡單的方法,我不應該使用異常?處理這個問題的最佳設計是什麼?
+1,[這裏](http://stackoverflow.com/a/18073392/33499)是一個更完整的實現,但它使用Qt – wimh
,所以異常不是這個。但是我讀了_Exception處理來識別程序無法處理的問題,並告訴它們有關用戶的信息,因爲用戶可以處理它們。從這個http://stackoverflow.com/questions/4506369/when-and-how-should-我使用的,異常處理?RQ = 1。然後,如果我使用消息框並請求用戶輸入另一個名稱,則可以或不可以由異常處理。 (+1兩者) –
@PnDs但它不是一個意外的問題。非常期望file_exists可以返回true或false - 這就是它的用途。而你正在處理這個問題。如果不管嘗試什麼都找不到合適的文件名,那麼拋出一個異常!在程序中更進一步,這可能會顯示一個消息框,或以其他方式優雅地通知用戶。 – polkadotcadaver