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

时间:2014-12-04 15:19:07

标签: c# io

我有一个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(filename)仅执行以下操作:

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语句,但我不确定如何在这种情况下实现它。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

我还没有尝试过运行您的代码,但我认为这就是问题:&/ p>

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

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

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