2013-12-03 11 views
0

Я хотел удалить 2 последних строки текстового файла.Аргументы WriteAllLines дают ошибку перегрузки

Я нашел этот 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); 

Почему, когда я использую эти данные exemples не работают со мной? Должен ли я что-то добавить?

У меня есть те, как с помощью:

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; 
+0

и что это ошибка? – jbabey

+0

Какая ошибка вы получаете? – Bas

+0

Когда я использую код int ссылок, ошибка «Лучшее перегруженное соответствие метода для« System.IO.File.WriteAllLines (string, string []) »имеет некоторые недопустимые аргументы» –

ответ

1

Вы можете использовать ArrayResize, чтобы сделать вещи проще:

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); 
+0

Лучше, чем мой цикл for –

0

вероятно дескриптор файла заблокирован, и вы пытаетесь получить доступ к какому-либо файлу с различной ручкой пытается изменить имя файла, когда вы пишете, например,

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

File.ReadAllLines освобождает дескриптор файла до его возврата. – Bas

+0

Я просто говорю, попробуйте –

+0

в комментариях, заявляя, что он получает ошибку сборки. – Bas

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); 
+0

Жаль, что этот код работает, который не работает со мной, это коды в ссылках. Этот код, который я написал, используя ссылки, используя часть кодов ссылок. Aruments as take не работает –

1

Удостоверьтесь, что PublicVariables.AddedFileName имеет тип string.

Чтобы уменьшить вероятность ошибок в коде и улучшить производительность для больших файлов, вы можете заменить ваш код следующим образом:

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

lines.Take использует Linq, чтобы перечислить из массива, пока второй в последний элемент достигнуто, это позволяет не копировать массив в память (и не иметь его в памяти дважды).

+0

Nice Linq решение! :) – Ashigore

+0

Да, это статическая строка. То, что вы написали, существует в ссылках, которые я написал. Но я не могу использовать то, что вы написали. debugger дает «Лучшее перегруженное соответствие метода для« System.IO.File.WriteAllLines (строка, строка []) «имеет некоторые недопустимые аргументы». –

+0

Проблема начинается, когда я добавляю после строк Take (что я хочу использовать :)) –

Смежные вопросы