[英]Trying to delete multiple files from a single directory whose names match\contain a particular string
我想刪除圖像文件。 這些文件名為somefile.jpg
和somefile_t.jpg
,最后帶_t
的文件是縮略圖。 使用此刪除操作,我希望刪除縮略圖和原始圖像。
代碼一直運行到foreach
循環, GetFiles
方法返回任何內容。 string.Substring操作成功返回沒有擴展名的文件名,也沒有_t
例如: somefile
。
我想刪除的文件名中沒有無效字符。 代碼對我來說很好,只有我能想到的是我在某種程度上沒有正確使用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();
}
}
DirectoryInfo.GetFiles方法(String,SearchOption)
, is proper. 您需要確保第一個參數正確。 在你的情況下,你提供FileName.Substring(0, FileName.Length - 2)
,這將是“somefile” 。 該方法什么都不返回的原因是因為您正在尋找名為somefile的文件。 as opposed to any other one. 你打算做的是除了基本文件名之外還使用通配符: String.Concat(FileName.Substring(0, FileName.Length - 2), "*")
,這將是“somefile *” ... at至少我認為你正在尋找那個 ,而不是任何其他的。
這段代碼適合我:
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”子字符串開頭的縮略圖文件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.