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",并创建它吗?
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 ;
}