0

サーバーから画像を削除する簡単なメソッドを作成しました。

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

この方法は、Visual Studio開発サーバーではうまく機能しますが、IISを使用するライブサーバーで試してみると、リソースが使用中であるというエラーが表示され続けます。最終的には約10回試行しても機能しますが、これを買う余裕はありません。

たぶん、これをIISで機能させるには、ファイルを「ロック」する必要がありますか?

ありがとう!

4

3 に答える 3

1

これを試して

FileInfo myfileinf = new FileInfo(deletePath);
myfileinf.Delete();
于 2012-07-02T09:37:21.500 に答える
1

ほとんどの場合、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);
                }
            }
        }
    }
于 2012-07-02T13:55:31.003 に答える
0
String filePath = string.Empty;
string filename = System.IO.Path.GetFileName(FileUpload1.FileName);    
filePath = Server.MapPath("../Images/gallery/") + filename;
System.IO.File.Delete(filePath); 
于 2012-07-02T11:06:41.740 に答える