Загрузите System.IO.FileStream, используя WildCard - PullRequest
2 голосов
/ 04 августа 2009

Я пытаюсь загрузить файл, который мне известен по части имени (и я знаю, что он будет однозначно идентифицирован частью, которую я знаю).

Вот суть этого:

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 ]

4 голосов
/ 04 августа 2009

Вам нужно найти нужный файл, прежде чем открыть 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 голос
/ 04 августа 2009

Пример использования подстановочных знаков:

  string[] fileNames = System.IO.Directory.GetFiles(@"c:\myfolder", "file*");
  if (fileNames.Length > 0)
  {
    // Read first file in array: fileNames[0]
  }
1 голос
/ 04 августа 2009

Нет, но это тривиально сделать самому.

private string ResolveWildcardToFirstMatch(string path)
{
    return Directory.GetFiles(Path.GetDirectoryName(path), 
                              Path.GetFileName(path) + "*")[0];
}
1 голос
/ 04 августа 2009

Использовать имя из первого результата System.IO.Directory.GetFiles()

1 голос
/ 04 августа 2009

Вы можете использовать метод Directory.GetFiles (), чтобы получить коллекцию файлов, которые сначала соответствуют шаблону, а затем работать с потоком на основе результата.

...