![](/img/trans.png)
[英]File.Delete cannot delete a file because it is being used by another process
[英]File.Delete cannot delete a file because it is being used by another process. Not sure how to fix this
我有一个项目,其中有一个网络表单,该表单可以动态生成.csv文件,然后使用GnuPG进行加密。 加密过程起作用,并且加密文件在同一目录中生成。 接下来,在文件加密之后,我需要删除常规的.csv文件。
我已经使用file.delete来做到这一点,但是却收到错误消息“该进程无法访问文件'FILEPATH / FILENAME.EXT',因为它正在被另一个进程使用。我不确定是否将代码放在错误的区域中。
谁能建议我该怎么办? 这是相关的代码。
public void encryptPGP(string fileName)
{
try
{
string sCommandLine = String.Format(@"-r ""CERT NAME"" -e ""{0}""", fileName);
//lblError.Text = "<pre>" + sCommandLine + "</pre>";
string userPwd = "COOLPWD";
System.Security.SecureString pwd = new System.Security.SecureString();
foreach (char c in userPwd.ToCharArray())
{
pwd.AppendChar(c);
}
System.Diagnostics.ProcessStartInfo info = new System.Diagnostics.ProcessStartInfo();
info.Arguments = sCommandLine;
info.Domain = "DOMAINNAME";
info.FileName = "C:\\Utilities\\GnuPG\\App\\gpg.exe";
info.Password = pwd;
info.UserName = "USERNAME";
info.UseShellExecute = false;
info.RedirectStandardOutput = true;
info.CreateNoWindow = true;
info.WorkingDirectory = "C:\\Utilities\\GnuPG\\App\\";
//writeToLog(info.FileName, "App");
//writeToLog(sCommandLine, "Args");
System.Diagnostics.Process proc = new System.Diagnostics.Process();
proc.StartInfo = info;
proc.Start();
lblError.Text = proc.StandardOutput.ReadToEnd();
System.IO.File.Delete(fileName);
}
catch (Exception ex)
{
lblError.Text = ex.Message;
//writeToLog(ex.Message, "");
}
}
// method for writing error log
private void writeToLog(string strMessage, string strMethod)
{
using (System.IO.StreamWriter file = new System.IO.StreamWriter(@"C:\\Log.txt", true))
{
file.WriteLine(string.Format("{0} - {1} - {2}", DateTime.Now, strMethod, strMessage));
}
}
// end method for writing error log
另外,这是创建文件的过程:
string fileName = @"c:\DIR\DIR\" + pt.SelectedItem.Value + pcf + "--" + usname + "--" + sname.Text + "--" + cdt + ".csv";
string lines = DropDownList3.SelectedItem.Value + "," + DropDownList8.SelectedItem.Value + "," + DropDownList1.SelectedItem.Value + "," + TextBox25.Text + "," + ssn.Text + "," + TextBox13.Text + "," + Lastname.Text + "," + firstname.Text + "," + " " + "," + TextBox1.Text + "," + TextBox3.Text + "," + TextBox4.Text + "," + TextBox5.Text + "," + TextBox6.Text + "," + TextBox9.Text + "," + TextBox10.Text + "," + TextBox11.Text + "," + TextBox2.Text + "," + " " + "," + TextBox22.Text + "," + TextBox26.Text + "," + TextBox29.Text + "," + TextBox19.Text + "," + TextBox27.Text + "," + TextBox30.Text + "," + TextBox24.Text + "," + TextBox28.Text + "," + TextBox8.Text + "," + DropDownList7.SelectedItem.Value + "," + TextBox38.Text + " " + TextBox34.Text + "," + TextBox33.Text + "," + TextBox41.Text + "," + TextBox35.Text + "," + TextBox36.Text + "," + TextBox37.Text + "," + TextBox54.Text + "," +" "+"," + TextBox12.Text;
System.IO.File.WriteAllText(fileName, lines);
encryptPGP(fileName);
我想说的是,当您尝试删除文件时,GnuPG可能仍在使用该文件。
您需要等待该过程结束才能进行删除,即添加:
proc.WaitForExit();
之前
System.IO.File.Delete(fileName);
创建文件时是否关闭了写流。 就是这样。 您需要关闭流然后删除。
无论您使用什么代码创建该文件,都必须具有一些描述流。 检查是否有关闭方法。 您可以首先发布创建文件的代码吗?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.