Ответ 1
Вам нужен один поток, открытый для чтения и записи.
FileStream fileStream = new FileStream(
@"c:\words.txt", FileMode.OpenOrCreate,
FileAccess.ReadWrite, FileShare.None);
Я хочу как читать, так и записывать в файл. Это не работает.
static void Main(string[] args)
{
StreamReader sr = new StreamReader(@"C:\words.txt");
StreamWriter sw = new StreamWriter(@"C:\words.txt");
}
Как я могу читать и записывать файлы в С#?
Вам нужен один поток, открытый для чтения и записи.
FileStream fileStream = new FileStream(
@"c:\words.txt", FileMode.OpenOrCreate,
FileAccess.ReadWrite, FileShare.None);
Не забывайте легкий маршрут:
static void Main(string[] args)
{
var text = File.ReadAllText(@"C:\words.txt");
File.WriteAllText(@"C:\words.txt", text + "DERP");
}
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.
Этот поток, кажется, отвечает на ваш вопрос: simultaneous-read-write-a-file
В принципе, вам нужно объявить два FileStream, один для операций чтения, другой для операций записи. Writer Filestream должен открыть файл в режиме "Добавить".
Вы можете попробовать это: файл "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();
Сделал код улучшения от @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");