C# 在实时服务器上删除映像的正确方法
我创建了一个从服务器上删除图像的简单方法C# 在实时服务器上删除映像的正确方法,c#,asp.net,iis,C#,Asp.net,Iis,我创建了一个从服务器上删除图像的简单方法 public static void deleteImage(string deletePath) { if (!File.Exists(deletePath)) { FileNotFoundException ex = new FileNotFoundException(); throw ex; } try
public static void deleteImage(string deletePath)
{
if (!File.Exists(deletePath))
{
FileNotFoundException ex = new FileNotFoundException();
throw ex;
}
try
{
File.Delete(deletePath);
}
catch (IOException ex)
{
throw ex;
}
catch (Exception ex)
{
throw ex;
}
}
该方法在VisualStudioDevelopment服务器上非常有效,但当我在使用IIS的live服务器上试用时,我不断收到一个错误,表示资源正在使用中。经过大约10次尝试后,它最终会起作用,但我负担不起
也许我需要“锁定”这个文件才能在IIS上工作
谢谢 试试这个
FileInfo myfileinf = new FileInfo(deletePath);
myfileinf.Delete();
在大多数情况下,IIS上的文件似乎被其他进程使用。最简单的解决方案是尝试在循环中删除文件,等待其他进程释放锁。不过,您应该考虑设置最大尝试次数,并在每个尝试之间等待数毫秒:
public static void DeleteImage(string filePath, int maxTries = 0) // if maxTries is 0 we will try until success
{
if (File.Exists(filePath))
{
int tryNumber = 0;
while (tryNumber++ < maxTries || maxTries == 0)
{
try
{
File.Delete(filePath);
break;
}
catch (IOException)
{
// file locked - we must try again
// you may want to sleep here for a while
// Thread.Sleep(10);
}
}
}
}
publicstaticvoiddeleteImage(stringfilepath,int-maxTries=0)//如果maxTries为0,我们将一直尝试,直到成功
{
if(File.Exists(filePath))
{
int-tryNumber=0;
while(tryNumber++
为什么捕获异常却抛出异常?另外,最好只抛出一个代码>而不是抛出ex代码>,这样可以保留原始堆栈跟踪。我总是在外部级别(即调用方法)处理异常。因此,无论调用什么方法,都会抛出并捕获异常。如果删除try/catch,那么异常仍然会传播到上层。只是一个catch(Exception ex){throw ex;}
除了销毁原始stacktrace之外,没有任何用处。是的,我知道,这只是我喜欢做的事情,因为我的强迫症lol!你知道是什么在创建文件还是将其锁定吗?你和我的文件到底有什么不同?你认为我是如何使用fileUpload控件的?很难说像这样你可能需要显示你用来上传文件的代码。我的代码只是删除文件,如果找到..不知道文件之间的区别是什么。删除和这一个,但这一个工程伟大!也将此纳入我的解决方案中。
public static void DeleteImage(string filePath, int maxTries = 0) // if maxTries is 0 we will try until success
{
if (File.Exists(filePath))
{
int tryNumber = 0;
while (tryNumber++ < maxTries || maxTries == 0)
{
try
{
File.Delete(filePath);
break;
}
catch (IOException)
{
// file locked - we must try again
// you may want to sleep here for a while
// Thread.Sleep(10);
}
}
}
}