c#打开文件异常

本文关键字:异常 文件 | 更新日期: 2023-09-27 18:05:13

我有一个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 Exception。

是否ReadAllTest()不应该检查文件是否存在?我应该添加一个特殊的异常捕获"filenotfound",并创建它吗?

c#打开文件异常

MSDN docs for File.ReadAllText明确表示,如果该文件不存在,它将抛出FileNotFoundException。所以,是的,你必须显式地检查它的存在。

最好不要依赖于异常,因为可以很容易地提前检查。一方面是因为潜在的性能问题(捕获异常比简单的if测试慢很多),另一方面是因为代码的清晰度和可读性——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 ;    
}