c# - 如何将一个文本文件的内容以更短的长度复制到另一个文本文件?

标签 c# winforms .net-2.0

我有一个大约 5,000 行的文本文件,我想将其内容复制到另一个文件,但只复制每行的前 38 个字符。

我目前有这段代码:

private void button1_Click(object sender, EventArgs e)
    {
        string line, line2;

        System.IO.StreamReader file = new System.IO.StreamReader(@"c:\test.txt");
        while ((line = file.ReadLine()) != null)
        {
            line2 = line.Substring(0, 38);
            using (System.IO.StreamWriter files = new System.IO.StreamWriter(@"C:\test2.txt"))
            {
                files.WriteLine(line2);
            }
        }

        file.Close();
    }

它只复制最后一行。 :(

最佳答案

因为您在循环中重写了新文件。你应该在循环中创建你的新字符串(使用 stringBuilder 会更有效),但是在循环之外写新文件:

    string line;
    var sb = new StringBuilder();
    System.IO.StreamReader file = new System.IO.StreamReader(@"c:\test.txt");
    while ((line = file.ReadLine()) != null)
        sb.AppendLine(line.Substring(0, Math.Min(38, line.Length)));

    file.Close();
    using (System.IO.StreamWriter files = new System.IO.StreamWriter(@"C:\test2.txt"))
        {
            files.WriteLine(sb.ToString());
        }

或者缩短

var result = File.ReadAllLines(@"c:\test.txt")
                 .Select(m => m.Substring(0, Math.Min(38, m.Length)));
File.WriteAllLines(@"C:\test2.txt", result);

关于c# - 如何将一个文本文件的内容以更短的长度复制到另一个文本文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18668093/

相关文章:

c# - 让 child 不受 parent 轮换的影响 Unity

c# - 为什么 C# 在带有委托(delegate)的输入参数中使用逆变(而不是协方差)?

c# - Awesomium JSObject 如何工作我找不到示例

c# - 如何重写以下行以在 .NET 2.0 上工作?

c# - 让 C# 识别 Visual Studio 之外的 dll

c# - 如何使用C#获取XML中特定属性的值?

java - Unity 是否使用 Xamarin?

c# - DateTimePicker:选择日期和时间

c# - 将集合转变为数据网格

c# - "Using"语句如何从 C# 转换为 VB?