2010-02-11 101 views
0

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

回答

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)); 
    } 
} 
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就像这听起来不像是一个好主意,不乞求麻烦。文件句柄在任何操作系统中都是有限的资源,所以修改它们并不是非常聪明。你可以根据需要访问这些文件,而不是简单地随意打开文件。

所以基本上只存储路径和根据需要访问文件可能是一个更好的选择。

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