C#创建文件,正由另一进程使用,因此该进程无法访问此文件。
看看这个时间点,想必各种方法都尝试过了。
可以确定的是,并没有进程访问新创建的这个文件。
但是却一直报错。
系统:windows server 2008 R2
环境:framework 3.5
private void saveAs(DataRow data)
{
int attachid = data["AttachID"].ToInt();
string fileName = data["FileName"].ToString();
SaveFileDialog sfd = new SaveFileDialog();
sfd.Filter = "*|*.*";
sfd.FileName = fileName;
sfd.FilterIndex = 0;
//sfd.RestoreDirectory = true;
if (sfd.ShowDialog() == DialogResult.OK)
{
if (sfd.OpenFile() != null)
{
string sql = string.Format("select FileContent from FormAttachment where AttachID = {0}", attachid);
byte[] content = (byte[])DataBridge.WSS.ExecuteScalar(sql);
if (!File.Exists(sfd.FileName))
{
File.Create(sfd.FileName).Close();
}
//System.IO.File.WriteAllBytes(sfd.FileName, content); //报错:正由另一进程使用,因此该进程无法访问此文件。
MemoryStream ms = new MemoryStream(content);
FileStream fs = new FileStream(sfd.FileName, FileMode.OpenOrCreate, System.IO.FileAccess.ReadWrite, FileShare.ReadWrite);//报错:正由另一进程使用,因此该进程无法访问此文件。
ms.WriteTo(fs);
ms.Close();
fs.Close();
}
}
}
if (sfd.ShowDialog() == DialogResult.OK)
{
string sql = ...;
byte[] content = (byte[])DataBridge.WSS.ExecuteScalar(sql);
System.IO.File.WriteAllBytes(sfd.FileName, content);
}
以上来自:
http://msdn.microsoft.com/en-us/library/system.windows.forms.savefiledialog.openfile.aspx
我觉得你不需要自己在Create了。
[解决办法]
if (sfd.OpenFile() != null) <--这做啥。。你这里OPen了下边当然不能保存了。 把这个去掉
[解决办法]
楼上全是正解,报错很明显了,如果你不知道何时关闭和释放,就用Using,或者手工关闭。