Tag: streamreader

关闭文件而不使用

我有一个类从一个文件流中读取数据并写入另一个文件流。 我关注在closeFiles()处理完成后关闭流。 你如何处理一个流的处理可能引发exception停止处理另一个流的可能性。 我应该近距离呼叫并处理流或只是一个? 如果我从流处理中捕获任何错误然后继续移动和删除文件会发生什么,如lastOperation()中所示? 在一个完美的世界中,我想在c ++样式初始化列表中使用using语句,但我很确定在c#中不可能。 编辑 :感谢快速反应的人。 所以我应该做的是从IDisposable派生,然后更改构造函数并添加这样的两个处理方法?: ~FileProcessor() { Dispose(true); } public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } private void Dispose(bool disposing) { if (!this.disposed) { if (disposing) { sw.Flush(); } closeFiles(); disposed = true; } } 这基本上就是我在做的事情: class FileProcessor { private string in_filename; private string out_filename; private StreamReader sr; private StreamWriter […]

为什么我的Stream不可读?

这是我的问题的续集,关于修剪日志文件中的脂肪。 我有这个代码: private readonly FileStream _fileStream; private readonly StreamWriter _streamWriter; . . . const int MAX_LINES_DESIRED = 1000; string uriPath = GetExecutionFolder() + “\\Application.log”; string localPath = new Uri(uriPath).LocalPath; if (!File.Exists(localPath)) { File.Create(localPath); } _fileStream = File.OpenWrite(localPath); // First, remove the earliest lines from the file if it’s grown too much StreamReader reader = new […]

如何使用StreamReader和StreamWriter创建文件副本

我需要使用StreamReader读取控制台应用程序上的.txt文件,然后创建一个具有不同名称但内容相同的新文件或备份。 问题是我无法弄清楚如何使用第一个文件中的内容放入新文件中。 (这是针对学校的事情而且是C#的新手) using System; using System.IO; namespace UserListCopier { class Program { static void Main() { string fineName = “zombieList.txt”; StreamReader reader = new StreamReader(fineName); int lineNumber = 0; string line = reader.ReadLine(); while (line != null) { lineNumber++; Console.WriteLine(“Line {0}: {1}”, lineNumber, line); line = reader.ReadLine(); } StreamWriter writetext = new StreamWriter(“zombieListBackup.txt”); writetext.Close(); […]

在流式传输时从Web请求中使用StreamReader流.NET?

我正在尝试使用Twitter流式传输API,我正在尝试为用户打开一个流,以便在事件发生时使用它们。 我正在使用一组标准的类来对twitter进行REST api调用。 在“GET”调用中使用https://userstream.twitter.com/2/user.json时 ,响应流永远不会结束…我正在打开StreamReader并按照我对任何其他REST调用的方式读取响应推特。 这对其他人来说可能是显而易见的,但我如何“消费”这个流…有没有办法在读取时读取StreamReader(意思是在它关闭之前)? 或者可能有一种不同的方法我可以用来使用这个流….再次,我道歉,如果这接缝是一些基本的,但我现在无法弄明白…提前感谢任何建议还是帮忙!!! 这是我开始对此进行故障排除的原始来源…这个方法是由我在LinkedIn上的论坛中找到的一组C#类编造的。 在读取“responseData = responseReader.ReadToEnd()”的行中,该方法开始“喝”流…但是这样做就像一个无底杯……在关闭之前实时读取这个数据流(这是基本上直到我停止调试或杀死进程)是我正在解决的问题。 Private Function WebResponseGet(ByVal webRequest As HttpWebRequest) As String Dim responseReader As StreamReader = Nothing Dim responseData As String = “” Try responseReader = New StreamReader(webRequest.GetResponse().GetResponseStream()) responseData = responseReader.ReadToEnd() Catch Throw Finally webRequest.GetResponse().GetResponseStream().Close() responseReader.Close() responseReader = Nothing End Try Return responseData End Function 更新及相关问题: 所以,我想出了以下方法来保持流打开,并将其写入文件(这不是最后的方法,我只是测试,开发这样做的最佳方式:) […]

将文件的前10行提取为字符串

public void get10FirstLines() { StreamReader sr = new StreamReader(path); String lines = “”; lines = sr.readLine(); } 如何在字符串中获取文件的前10行?

使用StreamReader计算重复项?

我现在正在使用streamreader来读取人名的文件,它是一个文本文件,人名,所以显然有重复,我希望能够显示现在有多少人有相同的例如: josh alex josh john alex 我想要它说, josh 2 alex 2 john 1 但我似乎无法找到一种简单的方法来做到这一点,这是最简单的方法,

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”并记录它到达文件的末尾,但从我得到的记录数量中可以明显看出它没有。

C#从两个哈希之间的文件中获取文本

在我的C#程序中(此时)我的表单中有两个字段。 一个是使用列表框的单词列表; 另一个是文本框。 我已经能够从文本文件成功地将大单词列表加载到列表框中。 我还可以通过这种方式将列表框中的选定项目显示到文本框中: private void wordList_SelectedIndexChanged(object sender, EventArgs e) { string word = wordList.Text; concordanceDisplay.Text = word; } 我有另一个本地文件,我需要在文本框中显示它的一些内容。 在此文件中,每个词条(如字典中)前面都有一个#。 所以,我想取变量’word’并在这个本地文件中搜索将条目放入文本框中,如下所示: #headword1 entry is here… … … #headword2 entry is here… … … #headword3 entry is here… … … 您将获得文本文件的格式。 我只需要在该单词之前用#搜索正确的词条,然后从那里复制所有信息直到文件中的下一个哈希值,并将其放在文本框中。 显然,我是新手,所以要温柔。 非常感谢。 PS我使用StreamReader来获取单词列表并将其显示在列表框中,如下所示: StreamReader sr = new StreamReader(“C:\\…\\list-final.txt”); string line; while ((line […]

C#从TcpClient读取流

我正在使用TcpClient和服务器制作服务器 – 客户端程序。 要从服务器发送我使用: static void send(string data) { sw.WriteLine(data + Environment.NewLine); } 当客户端连接时,我发送一些文本: client = listener.AcceptTcpClient(); sr = new StreamReader(client.GetStream()); sw = new StreamWriter(client.GetStream()); string line; try { send(“Hello world”); } //More code 并从客户端阅读: string data; data = sr.ReadLine(); if(data != string.Empty || data != null) { MessageBox.Show(data); } 我尝试放入内部(真实)并且它冻结了,我尝试放入计时器滴答圈并冻结… 我该如何解决? PS:客户端和服务器是2个不同的项目。

从大文本文件导入数据库时​​获取SystemOutOfMemoryException的方法

我们正在使用ZyWall来保护我们的服务器免受外部入侵。 它生成每日日志文件,大小超过GB,有时为2 GB。 它们通常包含超过1000万行。 现在我的任务是编写一个将这些行导入Oracle数据库的应用程序。 我是用C#编写的。 我目前正在做的是: 我逐行阅读日志文件。 我不立刻加载整个文件: 使用(StreamReader reader = new StreamReader(“C:\ ZyWall.log”)){while((line = reader.ReadLine())!= null)……} 每行阅读我根据其中的逗号将行分成几部分。 string [] lines = line.Split(new Char [] {‘,’},10); 然后我遍历lines数组,为预定义的DataTable对象创建一个新Row,并将数组值分配给该行中的列。 然后我将行添加到数据表中。 在读取所有行到数据表之后,我使用OracleBulkCopy将数据写入数据库中具有相同结构的物理表。 但问题是,当我将行添加到Datatable对象时,我得到SystemOutOfMemoryException,这是第3步。 如果我注释掉第3步然后在任务管理器中我看到应用程序消耗了大约17000 K的稳定内存量但是如果我取消注释该步骤,则内存使用量会增长,除非没有足够的内存来分配。 还有一种方法可以使用BulkCopy来执行此操作,还是我必须手动执行此操作? 我使用BulkCopy因为它比逐行插入行更快。