代码
public ActionResult DeleteProduct(int id)
{
var FindImageFromDb = DB.ImageGalleries.Where(x => x.ProductIdFk == id).ToList();
DirectoryInfo di = new DirectoryInfo(@"Path");
string[] Filenames = FindImageFromDb.Select(x => x.ImageName.ToString()).ToArray();
foreach (FileInfo Files in di.GetFiles(Filenames))
{
Files.Delete();
}
}
在编译时出错。在Foreach循环中将参数传递给GetFiles()时出错,因为我正在传递字符串数组,但它仅接受一行表示单个项目。所以我如何以其他方式删除特定文件删除该文件,谢谢
答案 0 :(得分:1)
将文件名检查移至循环内:
var fileNames = FindImageFromDb.Select(x => x.ImageName.ToString()).ToArray();
foreach (var file in di.GetFiles())
{
if (fileNames.Any(f => f == file.Name))
{
file.Delete();
}
}
答案 1 :(得分:0)
t
答案 2 :(得分:0)
只需遍历文件名并在循环内检索FileInfo:
foreach (string filename in filenames)
{
FileInfo[] fi = di.GetFiles(filename);
if (fi != null && fi.Length > 0)
{
// Consider if you'd like to check that only one file was found
// This might happen because GetFiles considers its input as a pattern
// However if you are using full file names (which is most likely the case), that shouldn't be necessary
fi[0].Delete();
}
}
答案 3 :(得分:0)
使用Lambda-
var files = di.GetFiles().Where(x => Filenames.Any(y => y == x.Name));