如何将文件加载到内存流中

时间:2011-06-02 11:35:21

标签: .net vb.net

我有一个文件名指向一个文本文件,包括它的路径,作为一个字符串。现在我想将此.csv文件加载到内存流中。我该怎么做?

例如,我有这个:

Dim filename as string="C:\Users\Desktop\abc.csv"

4 个答案:

答案 0 :(得分:64)

Dim stream As New MemoryStream(File.ReadAllBytes(filename))

答案 1 :(得分:30)

您无需将文件加载到MemoryStream中。

您只需致电File.OpenRead即可获得包含该文件的FileStream

如果您确实希望文件位于MemoryStream中,可以调用CopyTo将FileStream复制到MemoryStream。

答案 2 :(得分:0)

我有一个使用旧的XmlReader API从磁盘读取的XML文件。如何将XML文件读取到内存中,然后在内存中使用它,而不是反复读取磁盘?基于Centro的VB答案(已批准),但带有Using块,并且使用C#。

关键所在:

MemoryStream myXMLDocument = new MemoryStream(File.ReadAllBytes(@"c:\temp\myDemoXMLDocument.xml"));

如果您想将CSV文件加载到MemoryStream中,请问OP的问题:

MemoryStream myCSVDataInMemory = new MemoryStream(File.ReadAllBytes(@"C:\Users\Desktop\abc.csv"));

以下是一个代码段,显示了现在位于MemoryStream中的要通过XML文档读取的代码。基本上与来自FileStream的代码相同,该文件指向磁盘上的文件。是的,XMLTextReader API既旧又笨拙,但这是我在此应用程序中必须使用的。

    string myXMLFileName = @"c:\temp\myDemoXMLDocument.xml";
    using (MemoryStream myXMLDocument = new MemoryStream(File.ReadAllBytes(myXMLFileName)))
    {
            myXMLTextReader = new XmlTextReader(myXMLDocument);
            myXMLTextReader.WhitespaceHandling = WhitespaceHandling.None;
            myXmlTextReader.Read(); // read the XML declaration node, advance to <Batch> tag
            while (!myXmlTextReader.EOF) 
            {
                if (myXmlTextReader.Name == "xml" && !myXmlTextReader.IsStartElement()) break;
                // advance to <Batch> tag
                while (myXmlTextReader.Name == "Batch" && myXmlTextReader.IsStartElement())
                {
                    string BatchIdentifier = myXmlTextReader.GetAttribute("BatchIdentifier");
                    myXmlTextReader.Read(); // advance to next tag
                    while (!myXmlTextReader.EOF)
                    {
                        if (myXmlTextReader.Name == "Transaction" && myXmlTextReader.IsStartElement())
                        {
                            // Start a new set of items
                            string transactionID = myXmlTextReader.GetAttribute("ID");
                        myXmlTextReader.Read(); // Read next element, possibly another Transaction tag
                    }
                }
                //All Batch tags are completed.Move to next tag
                myXmlTextReader.Read();
            }
            // Close the XML memory stream.
            myXmlTextReader.Close();
            myXmlDocument.Close();
        }
    }

答案 3 :(得分:-1)

您可以将其复制到文件流中,如下所示:

string fullPath = Path.Combine(filePath, fileName);
FileStream fileStream = new FileStream(fullPath, FileMode.Open);
Image image = Image.FromStream(fileStream);
MemoryStream memoryStream = new MemoryStream();
image.Save(memoryStream, ImageFormat.Jpeg);
//Close File Stream
fileStream.Close();