2012-05-16 3 views
0

В настоящее время я работаю над проектом, где я должен удалить определенную строку текста из текстового файла.Удаление строки текста из файла from.txt

Это код, я уже:

static void Main(string[] args) 
    { 
     string line = null; 
     string line_to_delete = "--"; 
     string desktopLocation = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); 
     string text = Path.Combine(desktopLocation, "tim3.txt"); 
     string file = Path.Combine(desktopLocation, "tim4.txt"); 

     using (StreamReader reader = new StreamReader(text)) 
     { 
      using (StreamWriter writer = new StreamWriter(file)) 
      { 
       while((line = reader.ReadLine()) != null) 
       { 
        if (string.Compare(line, line_to_delete) == 0) 
         continue; 
        writer.WriteLine(line); 
       } 
      } 

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

Спасибо. Основная проблема заключается в том, что мне просто нужно удалить определенную строку текста в txt-файле.

+0

Столкнулись в отладчик? Это должно быть легко решить – CharlesB

+0

Ну, у меня нет ошибок, но когда я запустил его, он копирует весь текст frm te first txt во второй. он не удаляет текст или символ, который я указываю. –

+0

Взять на учет окончания строки. Покажите входные данные. Отладка может помочь вам и понять, что отличается в строках и почему сравнение не находит равных строк – gabba

ответ

0

Я подозреваю, ведущий/учебные места, которые вызывают String.comapre вернуть неожиданный результат

Вместо того

if (string.Compare(line, line_to_delete) == 0) 

попробовать

if(String.IsNullOrEmpty(line) || String.Equals(line.Trim(), line_to_delete)) 

Как и выше не работает вы можете попробовать (LINQ)

EDIT - заменить только текст,

File.WriteAllText(file, File.ReadAllText(text).Replace(line_to_delete,"")) 

Если вышеуказанные работы, он заменит все используя блок в коде

Если выше не работает, я подозреваю, что это проблема данных («__» нет в тексте file)

+0

String.IsNullOrEmpty (строка) || пропустит пустые строки, я понял, что это неправильно. – gabba

+0

Я просто пробовал этот код, но он дает мне тот же результат. он просто пишет тот же текст снова. –

+1

Трудно понять, что происходит. Я попытался бы поставить точку останова на линию if, обусловленную линией. Состояния (line_to_delete); а затем quickwatch две строки –

0

Насколько я знаю, вы не можете читать и писать в файл одновременно (блокировка файлов). Что вы можете сделать, это записать соответствующие данные в файл tim4.txt (как в вашем примере), и когда вы закончите, удалите tim3.txt и переименуйте tim4.txt в tim3.txt.

EDIT: Mis интерпретировал ваш вопрос. Я думал, что вы не можете записать свои изменения в один и тот же файл, но текст не фильтруется. Вы должны попробовать предложение Тилана

+0

хорошо, я видел много людей, которые так предлагают. Я понятия не имею, как я буду это делать. –

+0

На самом деле это довольно легко. После использования ваших операторов (когда все записи/записи IO выполняются) вставьте простой блок try/catch и вызовите File.Delete (file_to_delete). Затем вам нужно переименовать свой новый файл (tim4) в имя вашего старого (tim3). Поскольку C# не предоставляет функцию переименования, вы можете вызвать File.Move (old_file, new_file). Все это ясно? –

+0

Нашел того, кто разместил код точно так, как я имел в виду: http://stackoverflow.com/a/668917/1222748 –

0

Из ваших комментариев Я понимаю, что вы пытаетесь удалить строки, начиная с -. Если это так, вы просто должны изменить, если условие из:

  if (string.Compare(line, line_to_delete) == 0) 
       continue; 

к:

  if (line.Trim().IndexOf(line_to_delete) == 0) 
       continue; 
Смежные вопросы