繁体   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