从文件夹中获取文件

时间:2010-02-11 08:13:37

标签: c# asp.net

我在文件夹中有一些文件。我想从该文件夹中获取文件,并将每个文件转换为二进制流的对象并存储在集合中。从集合中,我想检索每个二进制流对象。如何使用ASP #Net和c#?

3 个答案:

答案 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)

可以使用DirectoryInfoFileInfo类来完成此操作。这里有一些代码可以满足您的需求:

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();
    }
}