我有一个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”,并创建它吗?
答案 0 :(得分:1)
File.ReadAllText
FileNotFoundException
明确指出,如果文件不存在,它将抛出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 ;
}
。所以是的,你必须明确检查它的存在。
最好不要依赖Exceptions来预先轻松检查。两者都是因为潜在的性能问题(捕获异常很多比简单的if测试慢),以及代码清晰度和可读性 - if / else分支通常比a / else分支更容易理解和结构try / catch块。通过这种方式,您可以在发生之前处理错误并修复它(例如,如果需要,可以创建文件)
{{1}}