Tag: streamreader

需要使用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转换为字符串?

我修改了我的代码,因此我可以将文件打开为只读。 现在我无法使用File.WriteAllText因为我的FileStream和StreamReader没有转换为字符串。 这是我的代码: static void Main(string[] args) { string inputPath = @”C:\Documents and Settings\All Users\Application Data\” + @”Microsoft\Windows NT\MSFax\ActivityLog\OutboxLOG.txt”; string outputPath = @”C:\FAXLOG\OutboxLOG.txt”; var fs = new FileStream(inputPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite | FileShare.Delete); string content = new StreamReader(fs, Encoding.Unicode); // string content = File.ReadAllText(inputPath, Encoding.Unicode); File.WriteAllText(outputPath, content, Encoding.UTF8); }

以块的forms读取大文件c#

我想通过块读取非常大的文件(4GBish)块。 我目前正在尝试使用StreamReader和Read()读取方法。 语法是: sr.Read(char[] buffer, int index, int count) 因为索引是一个int所以在我的情况下会溢出 。 我该怎么用?

StreamReader抱怨该文件不存在,但它确实存在

我有一个本地化的应用程序,可以在整个欧洲使用。 我有一个菜单选项从磁盘加载文件。 此操作在我的开发机器上正常工作但在我用于测试其他操作系统的虚拟机上不起作用_例如法语,西class牙语等。 StreamReader尝试打开文件时生成FileNotFoundException。 它说“’找不到文件C:\ Program Files \ MyCompany \ MyTool \ bin \ Files \ debug.txt’” 事实是,文件确实存在,位于正确的位置并且文件名正确。 目标(法语)操作系统上的目录名称与开发机器相同。 有任何想法吗? string ourPath = System.IO.Path.GetDirectoryName(System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName); try { System.IO.StreamReader sr = System.IO.File.OpenText(ourPath + @”\bin\Files\debug.txt”); string input = null; while ((input = sr.ReadLine()) != null) { m_text.Append(input); } sr.Close(); } catch (System.IO.FileNotFoundException) { MessageBox.Show(“LoadDebugOptions: File Not Found: ” […]

从C#Resources读取文本文件

我需要从我的资源中读取一个文件并将其添加到列表中。 我的代码: private void Form1_Load(object sender, EventArgs e) { using (StreamReader r = new StreamReader(Assembly.GetExecutingAssembly().GetManifestResourceStream(“myProg.myText.txt”))) { //The Only Options Here Are BaseStream & CurrentEncoding } } 我搜索了这个,只得到了像”Assembly.GetExecutingAssembly….”这样的答案,但我的程序没有选择汇编。

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#System.Diagnostics.Process重定向标准输出以获取大量数据

我从.NET应用程序运行exe并尝试将标准重定向到streamreader。 问题是,当我这样做 myprocess.exe >> out.txt out.txt接近14mb。 当我执行命令行版本时,它非常快,但是当我从我的csharp应用程序运行该过程时,它非常慢,因为我相信默认的streamreader每4096字节刷新一次。 有没有办法更改Process对象的默认流读取器?

如何将多个TextReader串在一起?

我有3个TextReaders – StreamReaders和StringReaders的组合。 从概念上讲,它们的串联是单个文本文档。 我想调用一个带有单个TextReader的方法(不在我的控制之下)。 是否有任何内置或简单的方法可以从多个TextReader中连接TextReader? (我可以编写自己的TextReader子类,但它看起来相当多。在这种情况下,我只是将它们全部写入临时文件,然后用一个StreamReader打开它。) 有一个简单的解决方案,我错过了吗?

using子句会关闭此流吗?

我显然已经习惯了一个糟糕的编码习惯。 以下是我编写的代码示例: using(StreamReader sr = new StreamReader(File.Open(“somefile.txt”, FileMode.Open))) { //read file } File.Move(“somefile.txt”, “somefile.bak”); //can’t move, get exception that I the file is open 我认为因为using子句在StreamReader上显式调用了Close()和Dispose() , FileStream也会关闭。 我能解决问题的唯一方法是将上面的块更改为: using(FileStream fs = File.Open(“somefile.txt”, FileMode.Open)) { using(StreamReader sr = new StreamReader(fs)) { //read file } } File.Move(“somefile.txt”, “somefile.bak”); // can move file with no errors 是否应该通过在第一个块中处理关闭StreamReader来关闭底层的FileStream ? […]

如何使用streamreader读取csv时跳过第一行

我有以下代码从csv文件中读取值并进行一些处理。 我想跳过输入csv文件的第一行,因为它包含头文本,但我想在处理完成后将其添加回去。 List values = new List(); using (StreamReader sr = new StreamReader(filePath)) { while (sr.Peek() != -1) { string line = sr.ReadLine(); List lineValues = line.Split(‘,’).ToList(); var tempMinInt = 1; var tempValue = 1; var tempValInt = Convert.ToInt32(lineValues[4]); if (lineValues[3] == “1876”) { if (tempValInt % 60 != 0) { tempMinInt = (tempValInt / […]