天道酬勤,学无止境

StreamReader Read 方法不读取指定的字符数(StreamReader Read method doesn't read number of chars specified)

问题

我必须解析一个大文件,而不是这样做:

 string unparsedFile = myStreamReader.ReadToEnd(); // takes 4 seconds
 parse(unparsedFile); // takes another 4 seconds

我想利用前 4 秒并尝试通过执行以下操作同时完成两件事:

        while (true)
        {
            char[] buffer = new char[1024];

            var charsRead = sr.Read(buffer, 0, buffer.Length);

            if (charsRead < 1)
                break;

            if (charsRead != 1024)
            {
                Console.Write("Here");  // debuger stops here several times why?
            }

            addChunkToQueue(buffer); 
        }

这是调试器的图像:(我添加了int counter以显示我们读取的小于 1024 字节的迭代)

在此处输入图片说明

请注意,读取 643 个字符而不是 1024 个字符。在下一次迭代中,我得到:

在此处输入图片说明

我想我应该一直读取 1024 个字节,直到最后一次迭代,其中剩余字节小于 1024。

所以我的问题是为什么我会在迭代抛出 while 循环时读取“随机”数量的字符?


编辑

我不知道我在处理什么样的流。 我执行一个过程,如:

        ProcessStartInfo psi = new ProcessStartInfo("someExe.exe")
        {
            RedirectStandardError = true,
            RedirectStandardOutput = true,
            UseShellExecute = false,
            CreateNoWindow = true,
        };

        // execute command and return ouput of command
        using (var proc = new Process())
        {
            proc.StartInfo = psi;
            proc.Start();                               

            var output = proc.StandardOutput;  //  <------------- this is where I get the strem

            //if (string.IsNullOrEmpty(output))
            //output = proc.StandardError.ReadToEnd();

            return output;
        }
    }
回答1

来自文档:http://msdn.microsoft.com/en-us/library/9kstw824

使用 Read 方法时,使用与流的内部缓冲区大小相同的缓冲区更有效,其中内部缓冲区设置为所需的块大小,并且始终读取小于块大小。 如果在构造流时未指定内部缓冲区的大小,则其默认大小为4 KB(4096 字节) 。 如果在将数据读入缓冲区后操作底层流的位置,则底层流的位置可能与内部缓冲区的位置不匹配。 要重置内部缓冲区,请调用 DiscardBufferedData 方法; 但是,此方法会降低性能,仅在绝对必要时才应调用。

所以对于返回值,文档说:

已读取的字符数,如果在> 流的末尾且未读取数据,则为 0 该数字将小于或等于 count 参数,具体取决于数据在流中是否可用。

或者,总而言之 - 您的缓冲区和底层缓冲区的大小不同,因此您的缓冲区被部分填充,因为底层缓冲区尚未被填充。

回答2

一方面,您正在阅读characters ,而不是bytes 。 有很大的不同。

至于为什么它不一定一次读取所有内容:也许没有那么多可用数据, StreamReader决定为您提供它所拥有的内容,而不是在不确定的时间内阻塞以填充您的缓冲区。 它完全有权这样做。

这是来自本地文件还是通过网络? 通常本地文件操作比网络下载更有可能填充缓冲区,但无论哪种方式,您都不应该依赖正在填充的缓冲区。 如果它是一个“文件”(即使用FileStream读取)但它恰好位于网络共享上......好吧,这是我所知的灰色区域:) 它是一个流 - 以这种方式对待它。

回答3

这取决于您正在阅读的实际流。 如果这是文件流,我想它不太可能获得“部分”数据。 但是,如果您从网络流中读取数据,则必须期望数据以不同长度的块的形式出现。

标签

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • 如何读取文本文件中的指定行?(How do I read a specified line in a text file?)
    问题 给定一个文本文件,我将如何读取文件中的任意行而没有其他内容? 说,我有一个文件test.txt。 我将如何读取文件中的第15行? 我所看到的是涉及将整个文本文件存储为String数组,然后将行号的值用作要在数组中使用的String的数量的东西……但是有一些复杂性:文本文件巨大而我正在编写应用程序的机器也不是一流的系统。 速度不是重中之重,但这绝对是一个主要问题。 有什么方法只能读取文本文件的特定行并将结果存储为字符串吗? 感谢您的答复:该文件为KINDA结构。 它有25行信息,然后有X行数字,但前25行的第17行的值为X。 但是,这里有1个空行,它会在文件中的第二条记录中重复出现,并且X可以为每个记录取不同的值。 我想做的是读取并存储前25行作为独立值,然后存储接下来的X行(通常在250左右)作为数组。 然后,将其存储在SQL数据库中,并重复NEXT记录,直到到达第Y个记录为止(文件中的记录数在第3行中) 编辑2 :好吧,我想我已经根据您的全部回答达成了一个解决方案。 我将阅读前25行并将其存储为数组。 我将把数组的相关内容复制到局部变量,然后删除前25行。 然后,我可以使用该信息将接下来的X行(数组中项13的值)存储为数组,对其进行序列化,将其存储在数据库中,然后删除我刚刚读取的行。 然后,我可以为每个后续记录重复该过程。 当然,这取决于我所做的一个假设,说实话
  • 获取大于10GB的超大文本文件的最后10行(Get last 10 lines of very large text file > 10GB)
    问题 显示超大文本文件(此特定文件超过10GB)的最后10行的最有效方法是什么。 我当时只是想编写一个简单的C#应用​​程序,但不确定如何有效地执行此操作。 回答1 读取到文件的末尾,然后向后搜索,直到找到十个换行符,然后再考虑各种编码后再向前读取。 确保处理文件中的行数少于十的情况。 下面是一个实现(在C#中,您已对此进行了标记),该实现被通用化为在文件中位于以编码方式encoding path中找到最后的numberOfTokens ,其中令牌分隔符由tokenSeparator表示; 结果以string形式返回(可以通过返回枚举标记的IEnumerable<string>进行改进)。 public static string ReadEndTokens(string path, Int64 numberOfTokens, Encoding encoding, string tokenSeparator) { int sizeOfChar = encoding.GetByteCount("\n"); byte[] buffer = encoding.GetBytes(tokenSeparator); using (FileStream fs = new FileStream(path, FileMode.Open)) { Int64 tokenCount = 0; Int64
  • 文件和文件夹的操作——文件流的使用
    1、文件的读取和写入思路:主要用到了File类的CreateText方法和StreamWriter类的WriteLine方法。(1)、File类的CreateText方法,该方法实现创建或打开一个文件用于写入UTF-8编码的文本。语法如下:public static StreamWriter(string path)(2)、StreamWriter类的WriteLine方法该方法实现将后跟行结束符的字符串写入文件流,语法如下:public virtual void WriteLine(string value)参数说明:value:要写入的字符串,如果value为null,则仅写入行结束字符。public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { if (saveFileDialog1.ShowDialog() == DialogResult.OK) { textBox1.Text = saveFileDialog1.FileName; } else { textBox1.Text = ""; } } private void button2_Click(object
  • .NET C#-随机访问文本文件-没有简单的方法吗?(.NET C# - Random access in text files - no easy way?)
    问题 我有一个文本文件,其中包含几个“记录”。 每个记录都包含一个名称和一组数字作为数据。 我正在尝试建立一个类,该类将读取文件,仅显示所有记录的名称,然后允许用户选择他/她想要的记录数据。 第一次浏览文件时,我只读取标头名称,但是可以跟踪标头所在文件中的“位置”。 我需要对文本文件进行随机访问,以在用户要求后搜索每个记录的开头。 我必须这样做,因为文件太大,无法与应用程序的其他内存需求一起完全在内存(1GB +)中读取。 我尝试使用.NET StreamReader类来完成此操作(它提供了非常易于使用的“ ReadLine”功能,但是无法捕获文件的真实位置(由于缓冲该类使用)。 在.NET中没有简单的方法可以做到这一点? 回答1 提供了一些很好的答案,但是我找不到一些非常简单的源代码。 就是这样,希望可以节省别人在我周围搜索所花费的时间。 我指的是“非常简单的情况”:文本编码是固定宽度的,并且行尾字符在整个文件中是相同的。 这段代码在我的情况下效果很好(我正在解析一个日志文件,有时我必须先在该文件中查找,然后再返回。我实现了足以完成我需要做的事情(例如:只有一个构造函数) ,并且仅覆盖ReadLine()),因此很可能需要添加代码...但是我认为这是一个合理的起点。 public class PositionableStreamReader : StreamReader {
  • Java 读写文件的7个实例(BufferedReader BufferedWriter FileInputStream FileOutputStream)
    文章目录 1.写文件File + FileOutputStream 按字节写入FileWriter + BufferedWriter 按字符写入 2.读文件File + FileInputStream 按字节读取File + FileInputStream + InputStreamReader 按字符读取File + FileInputStream + InputStreamReader+BufferedReader 按字符读取为什么使用BufferedReader FileReader + BufferedReader 按行读取(使用stream)边读边写二进制图片 File + FileInputStream + FileOutputStream 1.写文件 File + FileOutputStream 按字节写入 package indi.huishi; import org.junit.Test; import java.io.*; import java.nio.charset.StandardCharsets; import java.util.Arrays; import java.util.stream.Stream; public class IOTest { /** * 写文件1 File + FileOutputStream * @throws
  • 如何使用ANSI编码和非英语字母读取文本文件?(How to read text files with ANSI encoding and non-English letters?)
    问题 我有一个包含非英语字符的文件,并使用非英语代码页以ANSI编码保存。 如何在C#中读取此文件并正确查看文件内容? 无法运作 StreamReader sr=new StreamReader(@"C:\APPLICATIONS.xml",Encoding.ASCII); var ags = sr.ReadToEnd(); sr=new StreamReader(@"C:\APPLICATIONS.xml",Encoding.UTF8); ags = sr.ReadToEnd(); sr=new StreamReader(@"C:\APPLICATIONS.xml",Encoding.Unicode); ags = sr.ReadToEnd(); 工作正常,但我需要提前知道什么是代码页,这是不可能的。 sr=new StreamReader(@"C:\APPLICATIONS.xml",Encoding.GetEncoding(1252)); ags = sr.ReadToEnd(); 回答1 var text = File.ReadAllText(file, Encoding.GetEncoding(codePage)); 代码页列表:http://msdn.microsoft.com/zh-cn/library/windows/desktop/dd317756(v=vs.85
  • C#中的FileStream StreamReader问题(FileStream StreamReader problem in C#)
    问题 我正在测试FileStream和StreamReader类如何工作。 通过控制台应用程序。 我正在尝试进入一个文件并读取这些行并将其打印在控制台上。 我已经可以使用while循环来做到这一点,但是我想通过foreach循环来尝试一下。 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; namespace testing { public class Program { public static void Main(string[] args) { string file = @"C:\Temp\New Folder\New Text Document.txt"; using(FileStream fs = new FileStream(file, FileMode.Open, FileAccess.Read)) { using(StreamReader sr = new StreamReader(fs)) { foreach(string line in file) { Console.WriteLine(line); } } } } } } 我一直为此得到的错误是:无法将类型'char'转换为'string'
  • 如何使用C#将整个文件读取为字符串?(How to read an entire file to a string using C#?)
    问题 将文本文件读入字符串变量的最快方法是什么? 我知道可以通过多种方式完成操作,例如读取单个字节,然后将其转换为字符串。 我一直在寻找一种编码最少的方法。 回答1 怎么样File.ReadAllText: string contents = File.ReadAllText(@"C:\temp\test.txt"); 回答2 C.文件处理中File.ReadAllLines与StreamReader ReadLine基准比较 结果。 对于具有10,000多个行的大型文件,StreamReader的速度要快得多,但是较小文件的差异可以忽略不计。 与往常一样,计划不同大小的文件,并且仅在性能不是很关键的情况下才使用File.ReadAllLines。 StreamReader方法 由于其他人建议使用File.ReadAllText方法,因此您也可以尝试更快(我尚未对性能影响进行定量测试,但它似乎比File.ReadAllText更快(请参见下面的比较))。 但是,只有在文件较大的情况下,性能的差异才可见。 string readContents; using (StreamReader streamReader = new StreamReader(path, Encoding.UTF8)) { readContents = streamReader.ReadToEnd(); }
  • 在C#中使用流读取大型文本文件(Reading large text files with streams in C#)
    问题 我有一个可爱的任务,要弄清楚如何处理被加载到应用程序的脚本编辑器中的大文件(就像我们用于快速宏的内部产品的VBA一样)。 大多数文件约为300-400 KB,可以很好地加载。 但是,当它们超过100 MB时,该过程将很困难(如您所料)。 发生的情况是,读取了文件并将其推送到RichTextBox中,然后将其导航-不必过多担心这一部分。 编写初始代码的开发人员只需使用StreamReader并执行 [Reader].ReadToEnd() 这可能需要一段时间才能完成。 我的任务是分解这段代码,将其分块读取到缓冲区中,并显示一个带有取消它选项的进度条。 一些假设: 大多数文件将为30-40 MB 文件的内容是文本(不是二进制),有些是Unix格式,有些是DOS。 检索到内容后,我们便可以确定使用哪种终止符。 一旦加载到RichTextBox中渲染所需的时间,就没有人关心。 这只是文本的初始加载。 现在开始提问: 我可以简单地使用StreamReader,然后检查Length属性(即ProgressMax)并发出Read来获取设置的缓冲区大小,并在后台工作程序内的while循环WHILST中进行遍历,以便它不会阻塞主UI线程吗? 然后,在完成后将stringbuilder返回到主线程。 内容将转到StringBuilder。 如果长度可用
  • PowerShell获取大(大)文件的行数(PowerShell get number of lines of big (large) file)
    问题 从文件中获取行数的一种方法是PowerShell中的以下方法: PS C:\Users\Pranav\Desktop\PS_Test_Scripts> $a=Get-Content .\sub.ps1 PS C:\Users\Pranav\Desktop\PS_Test_Scripts> $a.count 34 PS C:\Users\Pranav\Desktop\PS_Test_Scripts> 但是,当我有一个800 MB的大文本文件时,如何在不读取整个文件的情况下从中获取行号? 上面的方法将消耗过多的RAM,从而导致脚本崩溃或花费太长时间才能完成。 回答1 使用Get-Content -Read $nLinesAtTime逐步读取文件: $nlines = 0; # Read file by 1000 lines at a time gc $YOURFILE -read 1000 | % { $nlines += $_.Length }; [string]::Format("{0} has {1} lines", $YOURFILE, $nlines) 这是简单但缓慢的脚本,用于验证小文件上的工作: gc $YOURFILE | Measure-Object -Line 回答2 这是我拼凑的PowerShell脚本,它演示了几种不同的方法来计算文本文件中的行数
  • 读取GetResponseStream()的最佳方法是什么?(What is the best way to read GetResponseStream()?)
    问题 从GetResponseStream读取HTTP响应的最佳方法是什么? 目前,我正在使用以下方法。 Using SReader As StreamReader = New StreamReader(HttpRes.GetResponseStream) SourceCode = SReader.ReadToEnd() End Using 我不太确定这是否是读取http响应的最有效方法。 我需要将输出作为字符串,我看过一篇使用不同方法的文章,但是如果它是一个很好的文章,我还不太清楚。 在我的测试中,该代码在不同的网站上存在一些编码问题。 您如何阅读网络回复? 回答1 我对字符串做的简单方法。 注意StreamReader构造函数上true第二个参数。 这告诉它从字节顺序标记中检测编码,并且可能也有助于解决您遇到的编码问题。 string target = string.Empty; HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create("http://www.informit.com/guides/content.aspx?g=dotnet&seqNum=583"); HttpWebResponse response = (HttpWebResponse)httpWebRequest
  • 逐行读取文本文件的最快方法是什么?(What's the fastest way to read a text file line-by-line?)
    问题 我想逐行阅读文本文件。 我想知道我是否在.NET C#范围内尽可能高效地执行此操作。 到目前为止,我正在尝试以下操作: var filestream = new System.IO.FileStream(textFilePath, System.IO.FileMode.Open, System.IO.FileAccess.Read, System.IO.FileShare.ReadWrite); var file = new System.IO.StreamReader(filestream, System.Text.Encoding.UTF8, true, 128); while ((lineOfText = file.ReadLine()) != null) { //Do something with the lineOfText } 回答1 为了找到逐行读取文件的最快方法,您必须进行一些基准测试。 我已经在计算机上进行了一些小测试,但是您不能期望我的结果适用于您的环境。 使用StreamReader.ReadLine 这基本上是您的方法。 由于某种原因,您将缓冲区大小设置为最小的可能值(128)。 增加此值通常会提高性能。 默认大小是1,024,其他好的选择是512(Windows中的扇区大小)或4,096(NTFS中的群集大小)。 您将必须运行基准以确定最佳缓冲区大小
  • 从ASP.net中运行的Web参考客户端获取RAW Soap数据(Getting RAW Soap Data from a Web Reference Client running in ASP.net)
    问题 我正在尝试在当前项目中拍摄Web服务客户端。 我不确定服务服务器的平台(很可能是LAMP)。 我相信他们的做法是有缺陷的,因为我已经消除了与客户之间潜在的问题。 客户端是从服务WSDL自动生成的标准ASMX类型的Web参考代理。 我需要了解的是RAW SOAP消息(请求和响应) 最好的方法是什么? 回答1 我对web.config进行了以下更改,以获取SOAP(请求/响应)信封。 这会将所有原始SOAP信息输出到文件trace.log 。 <system.diagnostics> <trace autoflush="true"/> <sources> <source name="System.Net" maxdatasize="1024"> <listeners> <add name="TraceFile"/> </listeners> </source> <source name="System.Net.Sockets" maxdatasize="1024"> <listeners> <add name="TraceFile"/> </listeners> </source> </sources> <sharedListeners> <add name="TraceFile" type="System.Diagnostics.TextWriterTraceListener"
  • 即使遇到“另一个进程正在使用”异常,如何读取文件?(How can I read a file even when getting an “in use by another process” exception?)
    问题 在VB.NET或C#中,我试图读取另一个程序正在使用的文本文件的内容(这是关键,实际上,我无法停止该程序或它停止写入该文本文件,并且我想定期读出另一个程序中文本文件中当前的内容。 这是我正在使用的代码(VB.NET) Dim strContents As String Dim objReader As StreamReader objReader = New StreamReader(FullPath) strContents = objReader.ReadToEnd() objReader.Close() 或在C#中: var objReader = new StreamReader(FullPath); var strContents = objReader.ReadToEnd(); objReader.Close(); 但是,以上内容会引发IO异常“该进程无法访问文件'file.txt',因为它正在被另一个进程使用。” 在这种情况下,有什么解决方法吗? 回答1 FileStream logFileStream = new FileStream("c:\test.txt", FileMode.Open, FileAccess.Read, FileShare.ReadWrite); StreamReader logFileReader = new StreamReader
  • 极大的单行文件解析(Extremely Large Single-Line File Parse)
    问题 我从一个网站下载的数据,该网站给出的数据给我非常大的块。 在非常大的块中,有一些“块”需要我单独解析。 这些“块”以“((ClinicalData)””开头,并以“(/ ClinicalData)”结尾。 因此,示例字符串如下所示: (ClinicalData)(ID="1")(/ClinicalData)(ClinicalData)(ID="2")(/ClinicalData)(ClinicalData)(ID="3")(/ClinicalData)(ClinicalData)(ID="4")(/ClinicalData)(ClinicalData)(ID="5")(/ClinicalData) 在“理想”情况下,该块应是单行数据,但是有时会有错误的换行符。 由于我想解析块中的(ClinicalData)块,因此我想使我的数据能够逐行解析。 因此,我将文本文件读取,全部读取到StringBuilder中,删除换行符(以防万一),然后插入自己的换行符,这样便可以逐行读取。 StringBuilder dataToWrite = new StringBuilder(File.ReadAllText(filepath), Int32.MaxValue); // Need to clear newline characters just in case they exist
  • 读取文本文件的最后一行(Read last line of text file)
    问题 我需要知道如何读取文本文件的最后一行。 我需要找到这行代码,然后将其处理到SQL数据库中。我一直在阅读和搜索网络,但仍在努力寻找适当的方法来做到这一点。 IE: 查找文件的最后一行。 处理文件的最后一行。 我希望这是有道理的。 回答1 有两种方法:简单和低效,或极其复杂但有效。 复杂的版本假定使用合理的编码。 除非你的文件是如此之大,你真的可以读不起这一切,我只是用: var lastLine = File.ReadLines("file.txt").Last(); 请注意,这使用File.ReadLines,而不是File.ReadAllLines。 如果您使用的是.NET 3.5或更早版本,则需要使用File.ReadAllLines或编写自己的代码ReadAllLines将一次性将整个文件读入内存,而ReadLines则将其流化。 否则,复杂的方法是使用与此类似的代码。 它尝试从文件末尾向后读取,以处理诸如UTF-8多字节字符之类的内容。 这不愉快。 回答2 我可以简单地将File.ReadLines(path)和Enumerable.Last结合起来: String last = File.ReadLines(@"C:\file.txt").Last(); 它将流线,并且不将所有线作为File.ReadAllLines加载到内存中。 回答3 第一部分: File
  • 读取和写入文件的最简单方法(Easiest way to read from and write to files)
    问题 在C#中,有很多不同的方式来读取和写入文件(文本文件,而不是二进制文件)。 我只需要一些简单且使用最少代码的东西,因为我将在项目中处理很多文件。 我只需要一些string因为我需要的是读写string s。 回答1 使用File.ReadAllText和File.WriteAllText。 MSDN示例摘录: // Create a file to write to. string createText = "Hello and Welcome" + Environment.NewLine; File.WriteAllText(path, createText); ... // Open the file to read from. string readText = File.ReadAllText(path); 回答2 除了另一个答案中显示的File.ReadAllText , File.ReadAllLines和File.WriteAllText (以及File类的类似帮助器)之外,您还可以使用StreamWriter / StreamReader类。 编写文本文件: using(StreamWriter writetext = new StreamWriter("write.txt")) { writetext.WriteLine("writing in text
  • 从C#的文本文件中读取数字(Read numbers from a text file in C#)
    问题 这应该很简单。 我只想从包含用空格分隔的标记的文本文件中读取数字和单词。 您如何在C#中做到这一点? 例如,在C ++中,以下代码可以读取整数,浮点数和单词。 我不想使用正则表达式或编写任何特殊的解析代码。 ifstream in("file.txt"); int int_val; float float_val; string string_val; in >> int_val >> float_val >> string_val; in.close(); 同样,每当读取一个令牌时,都应读取该令牌之外的不超过一个字符。这允许进一步的文件读取取决于所读取的令牌的值。 作为一个具体的例子,考虑 string decider; int size; string name; in >> decider; if (decider == "name") in >> name; else if (decider == "size") in >> size; else if (!decider.empty() && decider[0] == '#') read_remainder_of_line(in); 解析二进制PNM文件也是一个很好的示例,说明了为什么要在读入完整令牌后立即停止读取文件。 回答1 布兰农的答案解释了如何读取二进制数据。 如果您想读取文本数据,则应该先读取字符串
  • 如何在ShareDenyWrite模式下打开StreamReader?(How to open a StreamReader in ShareDenyWrite mode?)
    问题 如何使用FILE_SHARE_READ,FILE_SHARE_WRITE,FILE_SHARE_DELETE打开StreamReader? 同样的问题,略有扩大 如何打开StreamReader以便可以读取带有共享选项的编码文本文件,以便另一个进程可以读取该文件? 如何打开StreamReader以便可以读取带有共享选项的编码文本文件,以便其他进程可以在读取文件时修改该文件? 如何打开StreamReader以便可以读取带有共享选项的编码文本文件,以便其他进程可以在读取文件时删除该文件? 同样的问题,稍微扩大一点 在.NET Framework类库中,有一个名为StreamReader的类。 它是唯一设计用于读取“文本”的类,因此它源自抽象的基础TextReader类。 TextReader/StreamReader允许您指定尝试打开的文件所使用的编码,并且可以为您解码该文件,并返回文本Strings 。 一旦我用StreamReader打开一个文件: var sr = new StreamReader(path); 该文件被锁定,其他进程无法修改或删除该文件。 我需要的是FileStream类的FileShare枚举的等效项: 无:拒绝共享当前文件。 任何通过该过程或其他过程打开文件的请求都将失败,直到关闭该文件。 Read “:允许随后打开文件进行读取。如果未指定此标志
  • 如何从MemoryStream中获取字符串?(How do you get a string from a MemoryStream?)
    问题 如果给我一个我知道已经用String填充的MemoryStream ,如何退回String ? 回答1 此示例说明如何向MemoryStream读取和写入字符串。 Imports System.IO Module Module1 Sub Main() ' We don't need to dispose any of the MemoryStream ' because it is a managed object. However, just for ' good practice, we'll close the MemoryStream. Using ms As New MemoryStream Dim sw As New StreamWriter(ms) sw.WriteLine("Hello World") ' The string is currently stored in the ' StreamWriters buffer. Flushing the stream will ' force the string into the MemoryStream. sw.Flush() ' If we dispose the StreamWriter now, it will close ' the BaseStream (which is our