C#打开文件异常

时间:2014-05-27 08:16:00

标签: c# file exception csv

我有一个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”,并创建它吗?

1 个答案:

答案 0 :(得分:1)

File.ReadAllText FileNotFoundException明确指出,如果文件不存在,它将抛出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 ; } 。所以是的,你必须明确检查它的存在。

最好不要依赖Exceptions来预先轻松检查。两者都是因为潜在的性能问题(捕获异常很多比简单的if测试慢),以及代码清晰度和可读性 - if / else分支通常比a / else分支更容易理解和结构try / catch块。通过这种方式,您可以在发生之前处理错误并修复它(例如,如果需要,可以创建文件)

{{1}}