使用WildCard加载System.IO.FileStream

时间:2009-08-03 20:58:04

标签: c# .net-3.5 file-io

我正在尝试加载一个我知道部分名称的文件(并且知道它将由我知道的部分唯一标识。)

以下是它的主旨:

string fileName = ID + " - " + Env + " - ";
byte[] buffer;
using (FileStream fileStream = new FileStream(Server.MapPath("~") + 
  fileName + "*", FileMode.Open))
{
    using (BinaryReader reader = new BinaryReader(fileStream))
    {
        buffer = reader.ReadBytes((int)reader.BaseStream.Length);
    }
}

第4行是我需要帮助的地方。如果我说fileName +“*”那么我将获得“ID - Env - *”而不是匹配任何文件的通配符“ID - Env - ”之后(我有ID和Env的实际变量,这里没有显示它们。)

有没有办法说“匹配任何适合开头的文件”?

(我正在使用VS 2008 SP1和.NET 3.5 SP1)

感谢您的帮助。

5 个答案:

答案 0 :(得分:4)

在打开FileStream之前,您需要找到所需的文件。

string[] files = System.IO.Directory.GetFiles(Server.MapPath("~"), fileName + "*");

if(files.Length == 1) // We got one and only one file
{
   using(BinaryReader reader = new BinaryReader(new FileStream(files[0])))
   {
       // use the stream
   }
}
else // 0 or +1 files
{
 //...
}

答案 1 :(得分:1)

您可以使用Directory.GetFiles()方法获取首先匹配模式的文件集合,然后根据结果使用流。

答案 2 :(得分:1)

使用System.IO.Directory.GetFiles()

的第一个结果中的名称

答案 3 :(得分:1)

不,但做自己是微不足道的。

private string ResolveWildcardToFirstMatch(string path)
{
    return Directory.GetFiles(Path.GetDirectoryName(path), 
                              Path.GetFileName(path) + "*")[0];
}

答案 4 :(得分:1)

使用外卡的示例:

  string[] fileNames = System.IO.Directory.GetFiles(@"c:\myfolder", "file*");
  if (fileNames.Length > 0)
  {
    // Read first file in array: fileNames[0]
  }