Tag: readline

StreamReader ReadLine在不是EOF时返回null

有一个我从未遇到过或听说过的奇怪问题。 似乎有时,StreamReader类的ReadLine()函数将返回NULL,就好像它位于文件的末尾,但它不是。 我的日志文件表明一切都在发生,就好像它实际上已经到达文件的末尾,但它只处理它的一部分。 似乎没有任何一致性,因为如果我从头开始重新启动进程,整个文件将被处理而不会发生意外。 很明显,文件本身并没有任何时髦,或者每次都会在同一行上执行此操作,而且它发生在几个不同的文件中,每次重新运行时,它都可以正常工作。 任何人都遇到类似的东西,或者对可能造成这种事情的东西有任何建议? 谢谢, 安德鲁 样品: line = _readerStream.ReadLine(); if (null != line) { eventRetVal = loadFileLineEvent(line); } else { // do some housecleaning and log file completed } _readerStream是已在其他位置打开的流。 loadFileLineEvent是一个传递的委托,它处理该行。 这有自己的error handling(使用日志记录),因此没有问题。 上面的例程(未完整显示)也有围绕它的error handling(带有记录),也没有被触发。 它正在进入“else”并记录它到达文件的末尾,但从我得到的记录数量中可以明显看出它没有。

如何在等待ReadLine时更新C#Windows控制台应用程序中的当前行?

在C#中构建Windows控制台应用程序时,是否可以在等待readline时更新控制台中的行? 我目前的代码是: do { Console.Clear(); Console.WriteLine(“RA: ” + scope.RightAscension); Console.WriteLine(“Dec: ” + scope.Declination); Console.WriteLine(“Status: ” + scope.Slewing); System.Threading.Thread.Sleep(1000); } while (true);

从流读取器读取一行而不消耗?

有没有办法提前读取一行来测试下一行是否包含特定的标签数据? 我正在处理一个具有开始标记但没有结束标记的格式。 我想读一行将它添加到一个结构然后测试下面的行,以确保它不是一个新的“节点”,如果它不是继续添加,如果它关闭该结构并创建一个新的 我能想到的唯一解决方案就是让两个流读取器同时出现在锁定步骤中的那种方式,但这看起来很浪费(如果它甚至可以工作) 我需要像peek但peekline这样的东西

为什么这段代码会在从StreamReader到达第一个ReadLine时挂起?

我在第一个arg中将一个大文件传递给下面的SendXMLFile(),但由于它导致手持设备“挂起”/“冻结”,我暂时硬编码了一个小得多的文件(3 KB而不是1121 KB)用于检测。 该文件确实存在(与.exe / .dll位于同一文件夹中),如下代码所示: // test with smaller file: fileName = “DSD_v6666_3_20140310140737916.xml”; MessageBox.Show(“Made it before file.Open”); using (FileStream fileTest = File.Open(fileName, FileMode.CreateNew)) { fileTest.Write(info, 0, info.Length); fileTest.Flush(); } if (!File.Exists(fileName)) { MessageBox.Show(String.Format(“{0} does not seem to exist”, fileName)); } else { MessageBox.Show(String.Format(“{0} DOES seem to exist”, fileName)); } string justFileName = Path.GetFileNameWithoutExtension(fileName); String […]

C# – StreamReader.ReadLine无法正常工作!

简单地说,我一直在尝试实现BufferedStreamReader在Java中的function。 我有一个套接字流打开,只想以线为导向的方式逐行阅读。 我有以下服务器代码。 while (continueProcess) { try { StreamReader reader = new StreamReader(Socket.GetStream(), Encoding.UTF8); string command = reader.ReadLine(); if (command == null) break; OnClientExecute(command); } catch (Exception e) { Console.WriteLine(e.ToString()); } } 以下客户端代码: TcpClient tcpClient = new TcpClient(); try { tcpClient.Connect(“localhost”, serverPort); StreamWriter writer = new StreamWriter(tcpClient.GetStream(), Encoding.UTF8); writer.AutoFlush = true; writer.WriteLine(“login>user,pass”); writer.WriteLine(“print>param1,param2,param3”); } catch […]

是否存在类似于GNU readline的.Net库?

我正在考虑用C#编写一个控制台应用程序,我希望将历史,完成和命令行编辑function纳入GNU readline(但不一定非常广泛!) 是否有.net的现有库提供此类function? 我想一个选择是使用互操作服务来调用GNU readline。 但是有原生选择吗?

需要使用StreamReader.ReadLine()获取行终止符

我写了一个C#程序来读取Excel .xls / .xlsx文件并输出到CSV和Unicode文本。 我写了一个单独的程序来删除空白记录。 这是通过使用StreamReader.ReadLine()读取每一行,然后通过字符串逐个字符来完成的,如果它包含所有逗号(对于CSV)或所有选项卡(对于Unicode文本),则不将该行写入输出。 当Excel文件在单元格内包含嵌入的换行符(\ x0A)时,会发生此问题。 我将XLS更改为CSV转换器以找到这些新行(因为它逐个单元格)并将它们写为\ x0A,而普通行只使用StreamWriter.WriteLine()。 在单独的程序中发生问题以删除空白记录。 当我使用StreamReader.ReadLine()读StreamReader.ReadLine() ,根据定义它只返回带有行的字符串,而不是终止符。 由于嵌入的换行符显示为两个单独的行,我无法分辨哪个是完整记录,哪个是我将它们写入最终文件时的嵌入式换行符。 我甚至不确定我能读到\ x0A,因为输入上的所有内容都注册为’\ n’。 我可以逐字逐句,但这会破坏我删除空行的逻辑。

StreamReader.Readline()真的是计算文件中行数的最快方法吗?

在环顾四周的时候,我发现了很多关于如何计算文件中行数的讨论。 例如这三个: c#如何计算文本文件中的行数 确定文本文件中的行数 如何快速计算线? 那么,我继续前进并最终使用了我能找到的最有效(至少是内存方式?)方法: private static int countFileLines(string filePath) { using (StreamReader r = new StreamReader(filePath)) { int i = 0; while (r.ReadLine() != null) { i++; } return i; } } 但是当文件中的行本身非常长时,这需要永远。 真的没有更快的解决方案吗? 我一直在尝试使用StreamReader.Read()或StreamReader.Peek()但是我不能(或者不知道如何)让它们中的任何一个一旦有’东西’就转移到下一行(字符?文字?)。 有什么想法吗? 结论/结果 (根据提供的答案进行一些测试后): 我在两个不同的文件上测试了下面的5种方法,我得到了一致的结果,似乎表明普通的StreamReader.ReadLine()仍然是最快的方法之一…说实话,我对所有评论后感到困惑在答案中讨论。 文件#1: 大小:3,631 KB 行数:56,870 文件#1的结果以秒为单位: 0.02 – > ReadLine方法。 0.04 – >读取方法。 0.29 – […]

C#为什么跳过我的console.readline()?

所以程序运行正常,但由于某种原因,在第二次通过时,它完全跳过Console.ReadLine()提示。 我经历了调试并确认它不是循环问题,因为它实际上正在进入方法,显示WriteLine然后完全跳过ReadLine,从而返回一个空白回Main()导致它退出。 什么是平分? 有任何想法吗? 这是代码。 using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; namespace LAB4B { class Program { static void Main(string[] args) { string inString; ArrayList translatedPhrase = new ArrayList(); DisplayInfo(); GetInput(out inString); do { GetTranslation(inString, translatedPhrase); DisplayResults(inString, translatedPhrase); GetInput(out inString); } while (inString != “”); } static void DisplayInfo() { Console.WriteLine(“*** […]

File.ReadLines()和File.ReadAllLines()之间有什么区别?

我有关于File.ReadLines()和File.ReadAllLines()的查询。它们之间有什么区别。 我有文本文件,其中包含行数据。 File.ReadAllLines()返回数组并使用File.ReadLines().ToArray(); 我也可以得到相同的结果。那么这些方法有什么性能差异吗? string[] lines = File.ReadLines(“C:\\mytxt.txt”).ToArray(); 要么 string[] lines = File.ReadAllLines(“C:\\mytxt.txt”);