我在文件夹中有一些文件。我想从该文件夹中获取文件,并将每个文件转换为二进制流的对象并存储在集合中。从集合中,我想检索每个二进制流对象。如何使用ASP #Net和c#?
答案 0 :(得分:4)
可以这么简单:
using System;
using System.Collections.Generic;
using System.IO;
List<FileStream> files = new List<FileStream>();
foreach (string file in Directory.GetFiles("yourPath"))
{
files.Add(new FileStream(file, FileMode.Open, FileAccess.ReadWrite));
}
但总的来说,像这样存储FileStream
听起来不是一个好主意并且会惹麻烦。 Filehandles在任何操作系统中都是一个有限的资源,所以hocking它们不是很好,不是很聪明。你最好根据需要访问这些文件,而不是简单地随意打开它们。
因此,基本上只存储路径并根据需要访问文件可能是更好的选择。
using System;
using System.Collections.Generic;
using System.IO;
List<String> files = new List<String>();
foreach (string file in Directory.GetFiles("yourPath"))
{
files.Add(file);
}
答案 1 :(得分:2)
如果您希望将其存储在MemoryStream中,可以尝试
List<MemoryStream> list = new List<MemoryStream>();
string[] fileNames = Directory.GetFiles("Path");
for (int iFile = 0; iFile < fileNames.Length; iFile++)
{
using (FileStream fs = new FileStream(fileNames[iFile], FileMode.Open))
{
byte[] b = new byte[fs.Length];
fs.Read(b, 0, (int)fs.Length);
list.Add(new MemoryStream(b));
}
}
如果您希望将文件名保留为键
,甚至可以使用词典Dictionary<string, MemoryStream> files = new Dictionary<string, MemoryStream>();
string[] fileNames = Directory.GetFiles("Path");
for (int iFile = 0; iFile < fileNames.Length; iFile++)
{
using (FileStream fs = new FileStream(fileNames[iFile], FileMode.Open))
{
byte[] b = new byte[fs.Length];
fs.Read(b, 0, (int)fs.Length);
files.Add(Path.GetFileName(fileNames[iFile]), new MemoryStream(b));
}
}
答案 2 :(得分:0)
可以使用DirectoryInfo和FileInfo类来完成此操作。这里有一些代码可以满足您的需求:
System.IO.DirectoryInfo dir = new System.IO.DirectoryInfo(@"C:\TempDir\");
if (dir.Exists)
{
foreach (System.IO.FileInfo fi in dir.GetFiles())
{
System.IO.StreamReader sr = new System.IO.StreamReader(fi.OpenRead());
// do what you will....
sr.Close();
}
}