Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.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# 从MVC目录中删除文件_C#_Asp.net Mvc - Fatal编程技术网

C# 从MVC目录中删除文件

C# 从MVC目录中删除文件,c#,asp.net-mvc,C#,Asp.net Mvc,代码 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.Im

代码

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()时出错,因为我正在传递字符串数组,但它只接受一行表示单个项。因此,我如何以任何其他方式删除特定文件,以删除这些文件,谢谢

只需遍历文件名并在循环中检索文件信息:

foreach (FileInfo Files in Filenames)
     {
         di.GetFiles(Files).delete()

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

将文件名检查移动到循环内部:

var fileNames = FindImageFromDb.Select(x => x.ImageName.ToString()).ToArray();
foreach (var file in di.GetFiles())
{
    if (fileNames.Any(f => f == file.Name))
    {
        file.Delete();
    }
} 
使用Lambda-

var files = di.GetFiles().Where(x => Filenames.Any(y => y == x.Name));

在循环中检查文件名作为旁白,您似乎没有检查用户是否有权访问此功能,任何授权用户都可以有效地删除所有文件。这是正确的吗?@Neil你是对的,但我已检查只有登录用户才能访问此操作。那么这是正确的吗?当然,但这是否意味着任何登录用户都可以删除任何文件?例如,如果我知道产品id,我可以删除您的文件。@Neil任何登录的用户都有自己的记录,我为用户分配了最多5个文件,因此用户只能访问自己的文件。并且您可以根据任何产品id删除最多5个文件,这很好,但问题是它会从目录中获取所有文件,若我的文件夹中有100000个文件,那个么首先它会获取所有文件,所以在那个之后,下一个进程将启动。