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