我正在尝试加载一个我知道部分名称的文件(并且知道它将由我知道的部分唯一标识。)
以下是它的主旨:
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)
感谢您的帮助。
答案 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]
}