[英]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.ReadAllText
的MSDN文档明确声明,如果文件不存在,它将抛出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.