第二个路径片段不能是驱动器或 UNC 名称

Second path fragment must not be a drive or UNC name

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

   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.

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

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

Further reading

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

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 Directory.GetFiles

GetFiles 会做你需要的。您可以编写一个新方法,该方法 returns 找到的文件的 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 等)