Удаление записи из файла (класс C # StreamWriter)

У меня есть файл, содержащий несколько текстовых записей, например

один
два
три

Теперь мне нужно удалить одну из записей, скажем «два». Я использую классы StreamReader и StreamWriter. Чтобы удалить, сначала я читаю содержимое файла в строку с помощью класса StreamReader, заменяю "two \ r \ n" в строке чтения на "", а затем я записываю эту строку в файл с помощью StreamWriter класс. Но, поскольку длина вновь записанной строки, т.е. «один \ r \ nтри \ r \ n», меньше, чем длина исходной строки, то есть «один \ r \ ntwo \ r \ nthree \ r \ n», первые несколько символов получают перезаписываются, а символы ближе к концу все еще остаются там, что приводит к "одному \ r \ nтри \ r \ nree \ r \ n". Кажется, простая проблема, но я застрял в ней. Любые идеи?

Переменная user содержит запись, которую нужно удалить.

string all = "";
using (IsolatedStorageFileStream isoStream = store.OpenFile("user_list", FileMode.Open))
{
    using (StreamReader sr = new StreamReader(isoStream))
    {
        all = sr.ReadToEnd();
        all = all.Replace(user + "\r\n", "");
    }
}
using (IsolatedStorageFileStream isoStream = store.OpenFile("user_list", FileMode.Open))
{
    using (StreamWriter sw = new StreamWriter(isoStream))
    {
        sw.Write(all);
        sw.Flush();
    }
}

person Divya    schedule 20.12.2011    source источник


Ответы (1)


Вы можете решить проблему, изменив FileMode.Open на FileMode.Create при открытии выходного файла. Это:

using (IsolatedStorageFileStream isoStream = 
    store.OpenFile("user_list", FileMode.Create))

Это перезапишет предыдущий файл.

person Jim Mischel    schedule 20.12.2011