如何在创建文件后关闭文件流或以其他方式创建对新创建文件的访问权限?
How do I close the filestream after creating a file or otherwise create access to the newly created file?
我正在使用 FileStream 将 canvas 图像保存到服务器。它第一次工作正常,但如果用户在同一会话期间再次访问该页面(不关闭浏览器),它会抛出错误 "The process cannot access the file 'C:\inetpub\wwwroot\CarmelFinancialWeb\Contracts\MyUniqueImageFileName.png' because it is being used by another process." 我尝试在 FileStream 上使用关闭和处置,但这仍然发生
过程:
- 用户进入 AssignContract 页面,在 canvas 中签名,点击保存按钮。
- 图像保存到文件
- 用户再次点击保存按钮(即使等了几分钟)
- 错误消息说文件已被另一个进程使用。
[AuthorizeAdmin]
[HttpPost]
public ActionResult AssignContract(string ID, ModelContract tempCurrentContract, string imageData)
{
try
{
if (imageData != null)
{
string fileName = "MyUniqueImageFileName.png";
string fileNameWitPath = Path.Combine(Server.MapPath("~/Contracts"), fileName);
using (FileStream fs = new FileStream(fileNameWitPath, FileMode.Create))
{
using (BinaryWriter bw = new BinaryWriter(fs))
{
byte[] data = Convert.FromBase64String(imageData);
bw.Write(data);
bw.Close();
bw.Dispose();
}
fs.Close();
fs.Dispose();
}
}
}
catch (Exception ex)
{
throw ex;
}
...
更新
对此没有任何反馈。有人对如何防止文件被锁定或如何解锁文件有建议吗?谢谢。
问题似乎是每次我访问图像以将其输出到另一个进程时文件都被锁定。所以对于我访问它的每个实例:
System.Drawing.Image image = System.Drawing.Image.FromFile(HttpContext.Current.Server.MapPath("~/Contracts/MyUniqueImageFileName.png"));
我不得不处理图像:
image.Dispose();
我确实注意到,如果我等了几分钟并尝试保存新图像,它并没有被锁定。那么也许 Dispose 功能会在一段时间后自动发生?如果有人知道或有办法在编写新文件之前解锁所有文件,我会对如何完成感兴趣。
我正在使用 FileStream 将 canvas 图像保存到服务器。它第一次工作正常,但如果用户在同一会话期间再次访问该页面(不关闭浏览器),它会抛出错误 "The process cannot access the file 'C:\inetpub\wwwroot\CarmelFinancialWeb\Contracts\MyUniqueImageFileName.png' because it is being used by another process." 我尝试在 FileStream 上使用关闭和处置,但这仍然发生
过程: - 用户进入 AssignContract 页面,在 canvas 中签名,点击保存按钮。 - 图像保存到文件 - 用户再次点击保存按钮(即使等了几分钟) - 错误消息说文件已被另一个进程使用。
[AuthorizeAdmin]
[HttpPost]
public ActionResult AssignContract(string ID, ModelContract tempCurrentContract, string imageData)
{
try
{
if (imageData != null)
{
string fileName = "MyUniqueImageFileName.png";
string fileNameWitPath = Path.Combine(Server.MapPath("~/Contracts"), fileName);
using (FileStream fs = new FileStream(fileNameWitPath, FileMode.Create))
{
using (BinaryWriter bw = new BinaryWriter(fs))
{
byte[] data = Convert.FromBase64String(imageData);
bw.Write(data);
bw.Close();
bw.Dispose();
}
fs.Close();
fs.Dispose();
}
}
}
catch (Exception ex)
{
throw ex;
}
...
更新
对此没有任何反馈。有人对如何防止文件被锁定或如何解锁文件有建议吗?谢谢。
问题似乎是每次我访问图像以将其输出到另一个进程时文件都被锁定。所以对于我访问它的每个实例:
System.Drawing.Image image = System.Drawing.Image.FromFile(HttpContext.Current.Server.MapPath("~/Contracts/MyUniqueImageFileName.png"));
我不得不处理图像:
image.Dispose();
我确实注意到,如果我等了几分钟并尝试保存新图像,它并没有被锁定。那么也许 Dispose 功能会在一段时间后自动发生?如果有人知道或有办法在编写新文件之前解锁所有文件,我会对如何完成感兴趣。