Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在实时服务器上删除映像的正确方法_C#_Asp.net_Iis - Fatal编程技术网

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);
                }
            }
        }
    }