C#打开文件异常

C#打开文件异常,c#,file,exception,csv,C#,File,Exception,Csv,我有一个C#form在文件操作方面有问题 下面是它的工作原理: 当用户单击“开始”按钮时,程序开始。 它打开文件(如果存在?),检查此文件的标题,如果此标题存在,则修改布尔值 然后,它再次打开文件,以放置一个头(如果不存在)和其他信息,或者仅放置信息(如果头存在) 代码如下: public bool enteteExiste = false; private void start_Click(object sender, EventArgs e) { try {

我有一个C#form在文件操作方面有问题

下面是它的工作原理:

当用户单击“开始”按钮时,程序开始。 它打开文件(如果存在?),检查此文件的标题,如果此标题存在,则修改布尔值

然后,它再次打开文件,以放置一个头(如果不存在)和其他信息,或者仅放置信息(如果头存在)

代码如下:

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 ;    
}
public bool enteteexist=false;
私有无效开始\单击(对象发送者,事件参数e)
{
尝试
{
验证项();
//费希尔中心插入
writeToCsv=新的StreamWriter(boxFilePath.Text+“\\”+文件名,true);
canAcces=正确;
}
捕获(例外)
{
MessageBox.Show(“不适用于文件归档的文件归档权”+Environment.NewLine+“确保您的文件归档和处理要求”+Environment.NewLine+“程序文件归档”);
}
}
公共无效验证项()
{
字符串AbsoluteFilePath=boxFilePath.Text+'\\'+文件名;
String[]fileContent=File.ReadAllText(绝对文件路径).Split(',');
for(int i=0;i
当文件已经存在时,程序运行正常, 当文件不存在时,程序进入catch异常

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

用于
文件。ReadAllText
明确声明,如果文件不存在,它将抛出一个
FileNotFoundException
。所以是的,你必须明确地检查它的存在

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

public void-verifieEntete()
{
字符串AbsoluteFilePath=boxFilePath.Text+'\\'+文件名;

如果(!File.Exists(absolutefilepath)//你应该先用File.Exists()检查你的文件是否存在,否则{create File;verifieEntete();它仍然会抛出一个异常,但会创建文件…为什么?引发的异常是“无法访问文件c:\…”已经在使用它在哪里抛出异常,它抛出了什么异常?(另外,请注意,即使您的第一行包含MAC;SERIAL…字符串,您仍然会遍历整个文件,而不是提前中断)这是另一个问题。请阅读异常及其含义:文件正在使用中,可能是由您用于创建该文件的代码使用的。请确保关闭该文件,并在此处或其他位置搜索此错误。
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 ;    
}