[英]C# open file exception
我有一個C#表單,文件操作有麻煩。
運作方式如下:
當用戶單擊“開始”按鈕時,程序開始。 它將打開文件(如果存在?),檢查此文件的標頭,如果此標頭存在,則修改一個布爾值。
然后,它再次打開文件,以放置標頭(如果不存在)和其他信息,或僅放置信息(如果標頭存在)
這是代碼:
public bool enteteExiste = false;
private void start_Click(object sender, EventArgs e)
{
try
{
verifieEntete();
//INSERTION DE L'ENTETE DU FICHIER CSV
writeToCsv = new StreamWriter(boxFilePath.Text + "\\" + filename, true);
canAcces = true;
}
catch (Exception)
{
MessageBox.Show("Droits d'accès au dossier insuffisant OU fichier déjà ouvert" + Environment.NewLine + "Assurez vous d'avoir fermé le fichier et de disposer des droits requis" + Environment.NewLine + "Arrêt de la procédure");
}
}
public void verifieEntete()
{
string absolutFilePath = boxFilePath.Text + '\\' + filename;
String[] fileContent = File.ReadAllText(absolutFilePath).Split(',');
for (int i = 0; i < fileContent.Length; i++)
if (fileContent[i].Contains("MAC;SERIAL;IP;MODELE;MODULE-EXT"))
enteteExiste = true ;
}
當文件已經存在時,程序運行正常;當文件不存在時,程序進入catch異常。
ReadAllTest()是否不應該檢查文件是否存在? 我應該添加一個特殊的異常捕獲“ filenotfound”並創建它嗎?
用於File.ReadAllText
的MSDN文檔明確聲明,如果文件不存在,它將拋出FileNotFoundException
。 因此,是的,您必須顯式檢查其存在。
最好不要依賴Exception來進行易於檢查的事情。 一方面是因為潛在的性能問題(捕獲異常是不是一個簡單的測試,如果慢了許多 ),都對代碼的清晰性和可讀性-一個的if / else分支通常比一個try / catch塊更容易理解和結構。 這樣,您可以在錯誤發生之前進行處理並進行修復(例如,如有必要,請創建文件)
public void verifieEntete()
{
string absolutFilePath = boxFilePath.Text + '\\' + filename;
if (!File.Exists(absolutFilePath) // <--- ADD EXPLICIT CHECK
{
// Create the file here.
}
// Now we know the file is *sure* to exist, because we handled it
// explicitly.
String[] fileContent = File.ReadAllText(absolutFilePath).Split(',');
for (int i = 0; i < fileContent.Length; i++)
if (fileContent[i].Contains("MAC;SERIAL;IP;MODELE;MODULE-EXT"))
enteteExiste = true ;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.