【问题标题】:StreamReader and TextReaderStreamReader 和 TextReader
【发布时间】:2012-05-20 18:07:18
【问题描述】:

我正在尝试使用 StreamReader 从 pbx 文件中读取,编辑内容并将内容显示到使用 c# 中的 TextReader 的新文件中。

这是我的第一个 c# 开发任务。

我在 uni 学习 java,我的新工作使用 c#。

基本上,我必须从电话系统读取 pbx 文件中包含的记录列表。但是,这些记录有一行良好的通话记录,然后是一行带有一些可疑字符的行,然后是另一行良好的记录。

我的任务是逐行阅读这个文件,然后编写一段代码来忽略带有可疑字符的行,并将好的记录输出到我的 c:\ 驱动器上的一个新文件中,我称为 output.txt。

我可以编写 while 循环来取出不可靠的字符,但我不确定要从我的 c 驱动器上的 pbx 文件中读取的 c# 代码,然后将编辑后的内容输出到一个名为 output.txt 的新文件,也在我的c 驱动器。

我是 C# 新手,并且已经在这方面探索了谷歌几个小时。只需要一点指导,我就走了……

【问题讨论】:

  • 欢迎来到本站。如果您发布一些您开始编写的代码,帮助您会容易得多:与帮助您从头开始编写代码相比,我们可能会更快地发现一两个错误。
  • “狡猾”的解决方法需要“狡猾”的可靠定义。有可能它们根本不狡猾,而只是使用错误编码读取文件的副作用。首先使用十六进制查看器查看文件内容,以便查看实际字节值并发现模式。

标签: c# visual-studio-2008


【解决方案1】:

你没有提到文件编码,所以我在这里坚持使用 UTF-8 默认值。

一个选项是读取、检查和有条件写入的循环的“常规”方法,如下所示:

var inputFilePath  = @"C:\temp\input.txt";
var outputFilePath = @"C:\temp\output.txt";

using (var reader = File.OpenText(inputFilePath))
using (var writer = File.CreateText(outputFilePath))
{
    string line;
    while ((line = reader.ReadLine()) != null)
    {
        var isValidLine = CheckLine(line);
        if (isValidLine)
        {
            writer.WriteLine(line);
        }
    }
}

由于您标记了此 VS2008,我猜这意味着您仅限于 .NET 3.5,但在 4.0 或更高版本上,您可以读取和写入枚举然后利用它(在 .NET 3.5 中,您必须将所有行读入内存,过滤,然后写入所有行)。

var inputFilePath  = @"C:\temp\input.txt";
var outputFilePath = @"C:\temp\output.txt";

var inputLines = File.ReadLines(inputFilePath);

var linesToWrite = inputLines
    .Where(line => IsLineValid(line));

File.WriteAllLines(outputFilePath, linesToWrite);

【讨论】:

  • 坚持使用默认值很可能是造成 OP 问题的原因。使用 utf8 写入 PBX 日志文件的几率非常低。至少推荐并显示 Encoding.Default 的用法
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-21
  • 1970-01-01
  • 2023-04-03
  • 1970-01-01
  • 2011-07-17
  • 1970-01-01
相关资源
最近更新 更多