WriteAllLines参数给出了重载错误

时间:2013-12-03 16:32:27

标签: c#

我想删除文本文件的最后两行。

我在论坛中发现了这个how to delete last line。我收到将字符串转换为字符串[]的重载错误。看了之后,我发现this建议使用数组。但两者都不适合我?!

最后我写了

 string [] lines = File.ReadAllLines(PublicVariables.AddedFileName);
        string [] newlines = new string[lines.Length-2];
        for (int i=0; i<lines.Length - 2; ++i)
            newlines[i] = lines[i];
        File.WriteAllLines(PublicVariables.AddedFileName, newlines);

为什么当我使用那些给出的例子时,我不能和我合作? 我应该加点东西吗?

我有那些使用:

using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing; 
using System.Linq;
using System.Text;
using System.Windows.Forms;
using MySql.Data;
using MySql.Data.MySqlClient;
using System.Net.NetworkInformation;
using System.IO;
using System.Threading;
using System.Diagnostics;

4 个答案:

答案 0 :(得分:1)

确保PublicVariables.AddedFileName的类型为string

为了减少代码中出现错误的可能性并提高较大文件的性能,您可以通过以下方式替换代码:

string[] lines = File.ReadAllLines(PublicVariables.AddedFileName);
File.WriteAllLines(PublicVariables.AddedFileName, 
    lines.Take(lines.Length - 2));

lines.Take使用Linq枚举数组,直到到达倒数第二个元素,这样就可以不在内存中复制数组(而不是在内存中复制两次)。

答案 1 :(得分:1)

您可以使用Array Resize来简化操作:

using System;
using System.IO;
using System.Text;

string [] lines = File.ReadAllLines(PublicVariables.AddedFileName);
Array.Resize(ref lines , lines.Length-2);

File.WriteAllLines(PublicVariables.AddedFileName, lines);

答案 2 :(得分:0)

可能是文件的句柄被锁定了,你试图用不同的句柄访问某个文件,试着在你写的时候更改文件的名称

 File.WriteAllLines(PublicVariables.AddedFileName+"1", newlines);

答案 3 :(得分:0)

您发布的代码没有任何问题可能导致您说明的错误,因此问题必须在其他地方,但是,此代码应该更快:

string[] lines = File.ReadAllLines(PublicVariables.AddedFileName);
string[] newlines = new string[lines.Length - 2];
Buffer.BlockCopy(lines, 0, newlines, 0, newlines.Length);
File.WriteAllLines(PublicVariables.AddedFileName, newlines);