我正在使用asp.net C#。我将图像文件保存在文件夹中并将其删除。当我删除它时出现错误“进程无法访问文件'C:\ Inetpub \ wwwroot \ Admin \ Temp \ visible_Jul-13-2009_035606.png',因为它正被另一个进程使用”
代码:
fupAddImage.PostedFile.SaveAs(Server.MapPath("Temp") + @"\" + tempFilename);
File.Delete(Server.MapPath("Temp") + @"\" + tempFilename);
答案 0 :(得分:2)
如何保存图像?您是否确保丢弃用于保存图像的所有图像和Stream
对象?由于Image
和Stream
(以及StreamWriter
)都实现了IDisposable
,因此您应该确保调用Dispose
(或在创建对象时使用块设置)保存图像后文件正确关闭。
更新:您可以尝试的一件事就是自己保存图像数据,以便更好地控制图像的完成方式:
private static void SaveFile(Stream input, string fileName)
{
using (Stream output = File.OpenWrite(fileName))
{
byte[] buffer = new byte[8192];
int bytesRead;
do
{
bytesRead = input.Read(buffer, 0, buffer.Length);
output.Write(buffer, 0, bytesRead);
} while (bytesRead == buffer.Length);
}
}
// Pass the uploaded file data to the above method like this:
SaveFile(fupAddImage.FileContent, Path.Combine(Server.MapPath("Temp"), tempFilename))
答案 1 :(得分:1)
您需要发布一些代码才能确定,但该文件可能仍在某处打开,因此您的应用程序尚未释放文件锁。在删除之前,请尝试关闭所有打开的流并处理指向该对象的任何文件句柄。
在处置指向它的所有句柄后,您可能还需要等待操作系统释放文件。
我猜这个问题就是上面的问题。如果你正在创建一个文件并在下一行删除它,操作系统可能还没有将文件刷新到磁盘,更不用说释放文件句柄和锁。尝试在写入和删除之间留出一些时间,看看是否可以再次删除它。
答案 2 :(得分:1)
您可以使用此代码上传和删除图片或文件
public class UploadFileTools
{
private string _path = string.Empty;
private string _fileType = string.Empty;
private string _filename = string.Empty;
private IFormFile _file = null;
public string path
{
get { return this._path; }
set { this._path = value; }
}
public string FileType
{
get { return this._fileType; }
set { this._fileType = value; }
}
public IFormFile file
{
get { return file; }
set { this._file = value; }
}
public string Filename
{
get { return _filename; }
set { _filename = value; }
}
public bool Upload()
{
try
{
string filePath = string.Format("{0}{1}{2}", _path, _filename, _fileType);
if (_file.Length > 0)
{
if (!Directory.Exists(_path))
Directory.CreateDirectory(Path.GetDirectoryName(filePath));
using (var fileStream = new FileStream(filePath, FileMode.Create))
{
_file.CopyTo(fileStream);
return true;
}
}
else
throw new Exception("Error!!! The file has a problem");
}
catch (Exception ex)
{
throw new Exception("Error !!! Your file could not be uploaded"+ex.Message);
}
}
public void RemoveFile(string path = null)
{
try
{
string serverPath = path;
if (string.IsNullOrEmpty(serverPath))
serverPath = string.Format("{0}{1}{2}", _path, _filename, _fileType);
if (File.Exists(serverPath))
{
File.Delete(serverPath);
}
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
}
查看模型:
public class SendFormViewModel
{
public IFormFile myFile { get; set; }
}
调用控制器
private readonly IHostingEnvironment _hostingEnvironment;
public HomeController(IHostingEnvironment hostingEnvironment)
{
_hostingEnvironment = hostingEnvironment;
}
[HttpPost]
public IActionResult save(SendFormViewModel model)
{
string fileName = string.Empty;
string extension = string.Empty;
try
{
if (model.myFile != null && model.myFile.Length > 0)
{
var allowedExtensions = new[] { ".png", ".jpg", ".jpeg" };
extension = Path.GetExtension(model.myFile.FileName);
if (allowedExtensions.Contains(extension.ToLower()) &&
model.myFile != null&& model.myFile.Length > 0)
{
UploadFileTools _up = new UploadFileTools();
string webRootPath = _hostingEnvironment.WebRootPath;
string staticPath = "/img/";
string path = webRootPath + staticPath;
fileName = "myImg";
_up.FileType = extension;
_up.Filename = fileName;
_up.path = path;
_up.file = model.myFile;
_up.RemoveFile(webRootPath + "/img/myImg" + extension);
if (_up.Upload())
{
return Json("ok");
}
}
}
return Json("ok");
}
catch (Exception ex)
{
return Json(ex.Message);
}
}
答案 3 :(得分:0)
尝试输入:
openfiles file_path_and_filename
在命令提示符(cmd.exe)中查找原因。
并确保您拥有删除权限。