4

如何通过主文件夹中的环境路径文件夹读取文件夹中的所有图像文件:

   string path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "mainFolder"); 

例如,如果一个文件路径的内部文件夹是:

  Bitmap bmp = new Bitmap(path + "/folder/pic1.bmp");

但我想阅读所有文件 mainFolder/folder

pic1.bmp
pic2.bmp
pic3.bmp
pic5.bmp

不知道如何正确地做到这一点:

foreach (string imageFileName in Directory.GetFiles(path, "/folder/*.bmp"))
{
    using (Bitmap bmp = new Bitmap(imageFileName))
    {
      // process 
    }
}

这样我就有:Second path fragment must not be a drive or UNC name

这样:

foreach (string imgFileName in Directory.GetFiles(path + "/folder/*.bmp"))

我有:Illegal characters in path.

4

3 回答 3

2

此代码失败,因为您必须提供文件名的模式作为第二个参数:

foreach (string imgFileName in Directory.GetFiles(path, "/folder/*.jpg"))

第二个失败,因为 '*' 是一个特殊符号,而 UNC 路径不接受它。

foreach (string imgFileName in Directory.GetFiles(path + "/folder/*.jpg"))

因此,您可以尝试执行以下操作:

foreach (string imgFileName in Directory.GetFiles(path + "/folder/","*.jpg")) 

MSDN 目录.GetFiles

于 2017-07-08T15:35:04.000 回答
0

Directory.GetFiles()不接受其路径名中的星号。您可以做的是提供文件扩展名作为搜索模式:

foreach(string filename in Directory.GetFiles(Path.Combine(path, "folder"), "*.jpg"))
    //Do your stuff here

进一步阅读

于 2017-07-08T15:31:30.387 回答
0

GetFiles 会做你需要的。您可以编写一个返回找到的文件的 String[] 的新方法。如果需要,这将允许您在其他地方使用它。

public String[] GetFilesFromFolder(String folder, String[] filters, bool recursiveSearch)
 {
    List<String> foundFiles= new List<String>();
    var searchingOption = recursiveSearch ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly;
    foreach (var filter in filters)
    {
       foundFiles.AddRange(Directory.GetFiles(folder, String.Format("*.{0}", filter), searchOption));
    }
    return foundFiles.ToArray();
 }

然后要使用它,只需执行以下操作:

String folder= "PATH TO FOLDER";
var filters = new String[] { "bmp", "jpg", "jpeg", "png" };
var files = GetFilesFromFolder(folder, filters, false);

这也使您可以控制搜索您喜欢的任何文件类型,因此不仅仅是 BMP,还有 JPG、PNG 或其他任何文件(Doc、Xls 等)

于 2017-07-08T18:53:55.780 回答