簡體   English   中英

C#打開文件異常

[英]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.ReadAllTextMSDN文檔明確聲明,如果文件不存在,它將拋出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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM