0

画像ファイルを削除したいのですが。ファイルには名前が付けられsomefile.jpg、末尾にがsomefile_t.jpg付いているファイルが_tサムネイルです。この削除操作で、サムネイルと元の画像の両方を削除したいと思います。

コードは、メソッドが何も返さないforeachループまで機能します。string.Substring操作は、拡張子や例GetFilesがないファイル名のみを正常に返します。_tsomefile

削除したいファイル名に無効な文字はありません。コードは私には良さそうですが、私が考えることができるのは、どういうわけかsearchpattern関数を適切に使用していないということだけです。

filesource = "~/somedir/somefile_t.jpg"

var dir = Server.MapPath(filesource);


            FileInfo FileToDelete = new FileInfo(dir);


            if (FileToDelete.Exists) 
            { 
                var FileName = Path.GetFileNameWithoutExtension(FileToDelete.Name);

                foreach(FileInfo file in FileToDelete.Directory.GetFiles(FileName.Substring(0, FileName.Length - 2), SearchOption.TopDirectoryOnly).ToList())
               {
                   file.Delete();
               }

            }
4

2 に答える 2

1

このコードは私のために働きます:

        var file_path = @"K:\Work\IoCToy\IoCToy\image.jpg";
        var dir = Path.GetDirectoryName(file_path);
        var fileNameWithoutExtension = Path.GetFileNameWithoutExtension(file_path);
        var files = Directory.EnumerateFiles(dir, string.Format("{0}*", fileNameWithoutExtension), SearchOption.TopDirectoryOnly);

もちろん、返されたファイル名でファイルを削除する必要があります。ここでは、フォルダに「image」サブストリングで始まる画像とサムネイルファイルのみが含まれていると想定しています。

于 2012-06-01T03:24:10.587 に答える
1

DirectoryInfo.GetFilesメソッド(String、SearchOption)

最初のパラメーターsearchPatternが適切であることを確認する必要があります。あなたが提供している場合FileName.Substring(0, FileName.Length - 2)、それは「somefile」になります。メソッドが何も返さない理由は、文字通りsomefileという名前のファイルを探しているためです。基本ファイル名に加えてワイルドカードを使用することを意図していました。String.Concat(FileName.Substring(0, FileName.Length - 2), "*")これは「somefile*」になります...少なくとも、他の検索パターンとは対照的に、そのsearchPatternを探していると思います。

于 2012-06-01T03:14:47.893 に答える