文件正由另一个进程使用 - 使用 FileInfo

本文关键字:使用 FileInfo 进程 另一个 文件 | 更新日期: 2023-09-27 18:33:04

我有一个SQL脚本文件,其中有一行我想在运行时操作。我想出了以下内容,它工作正常。但是,尝试再次运行它时出现异常,说该文件正被另一个进程使用。似乎文件没有被关闭,但我无法弄清楚在哪里以及为什么。

我有一个按钮可以执行以下操作:

OpenFileDialog dialog = new OpenFileDialog() { FileName = "Document", DefaultExt = ".csv", Filter = "Comma Seperated File (.csv)|*.csv" };
Nullable<bool> result = dialog.ShowDialog();
string filename = "";
if (result == true)
{
    filename = dialog.FileName;
}
updateSQLScript(filename);
FileInfo file = new FileInfo("''Tools_TextileMagazine''CSharp_Template''Tools_TextileMagazine''AdditionalFiles''SQLQuery1.sql");
string script = file.OpenText().ReadToEnd();
SqlConnection conn = new SqlConnection(clsConstants.LOCALDB_CONN_STRING);
Server server = new Server(new ServerConnection(conn));
server.ConnectionContext.ExecuteNonQuery(script);

方法updateSQLScript(文件名)仅执行以下操作:

string[] arrLine = File.ReadAllLines(clsConstants.PATH_TO_SQL_SCRIPT);
arrLine[9] = String.Format("FROM '{0}'", filename);
//THIS IS WHERE THE EXCEPTION IS THROWN THE SECOND TIME I CLICK THE BUTTON
File.WriteAllLines(clsConstants.PATH_TO_SQL_SCRIPT, arrLine);  

因此,按钮事件中发生的其他进程似乎干扰了我的updateSQLScript方法。在运行该方法之前,我不知道如何正确关闭文件。据我所知,我需要使用 using 语句,但我不确定在这种情况下如何实现它。

任何帮助将不胜感激。

文件正由另一个进程使用 - 使用 FileInfo

我还没有尝试运行你的代码,但我认为问题出在了这一行:

string script = file.OpenText().ReadToEnd();

OpenText() 方法返回一个需要关闭的 StreamReader。尝试类似操作:

string script;
using (StreamReader reader = file.OpenText())
{
    script = reader.ReadToEnd();
}