Подтвердить что ты не робот

Как читать и записывать файл в С#

Я хочу как читать, так и записывать в файл. Это не работает.

static void Main(string[] args)
{
    StreamReader sr = new StreamReader(@"C:\words.txt");
    StreamWriter sw = new StreamWriter(@"C:\words.txt");
}

Как я могу читать и записывать файлы в С#?

4b9b3361

Ответ 1

Вам нужен один поток, открытый для чтения и записи.

FileStream fileStream = new FileStream(
      @"c:\words.txt", FileMode.OpenOrCreate, 
      FileAccess.ReadWrite, FileShare.None);

Ответ 2

Не забывайте легкий маршрут:

    static void Main(string[] args)
    {
        var text = File.ReadAllText(@"C:\words.txt");
        File.WriteAllText(@"C:\words.txt", text + "DERP");
    }

Ответ 3

var fs = File.Open("file.name", FileMode.OpenOrCreate, FileAccess.ReadWrite);
var sw = new StreamWriter(fs);
var sr = new StreamReader(fs);

...

fs.Close();
//or sw.Close();

Главное - открыть файл с помощью флага FileAccess.ReadWrite. Затем вы можете создать любой поток /String/Binary Reader/Writers, который вам нужен, используя исходный FileStream.

Ответ 4

Этот поток, кажется, отвечает на ваш вопрос: simultaneous-read-write-a-file

В принципе, вам нужно объявить два FileStream, один для операций чтения, другой для операций записи. Writer Filestream должен открыть файл в режиме "Добавить".

Ответ 5

Вы можете попробовать это: файл "Filename.txt" будет создаваться автоматически в папке отладки bin-> при каждом запуске этого кода или вы можете указать путь к файлу, например: @"C:/...". Вы можете проверить наличие "Hello", перейдя в папку bin → debug

PS Не забудьте добавить Console.Readline() после этого фрагмента кода, иначе консоль не появится.

TextWriter tw = new StreamWriter("filename.txt");
        String text = "Hello";
        tw.WriteLine(text);
        tw.Close();

        TextReader tr = new StreamReader("filename.txt");
        Console.WriteLine(tr.ReadLine());
        tr.Close();

Ответ 6

Сделал код улучшения от @Ipsita - для использования асинхронного чтения\записи файлового ввода-вывода

readonly string logPath = @"FilePath";
...
public async Task WriteToLogAsync(string dataToWrite)
{
    TextReader tr = new StreamReader(logPath);
    string data = await tr.ReadLineAsync();
    tr.Close();

    TextWriter tw = new StreamWriter(logPath);
    await tw.WriteLineAsync(data + dataToWrite);
    tw.Close();
}
...
await WriteToLogAsync("Write this to file");