2009-03-03 4 views
60

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

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

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

ответ

68

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

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

FileShare.ReadWrite не является обязательным и, вероятно, является нежелательным, он позволит другим приложениям читать и записывать ваш файл во время его использования. Обычно FileShare.None предпочтительнее при записи в файл, чтобы другие пользователи не могли получить доступ к файлу во время работы над ним. – ScottS

+0

@ScottS: Я согласен с тем, что ReadWrite необходим, поскольку вы можете позволить конструктору определить режим совместного доступа. – Samuel

+2

Опустить последний ')' – user194743

30
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. Затем вы можете создать любой Stream/String/Binary Reader/Writers, который вам нужен, используя исходный FileStream.

60

Не забудьте легкий путь:

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

@Copperpot: Проверьте требования к вопросу. Ничего не говорит о блокировке. Кроме того, он ничего не говорит о сбоях жесткого диска или метеорных ударах. – Will

+1

Я думаю, что вопрос подразумевает «в то же время». –

+3

@JohnAtwood Вы знаете, что они говорят о допущениях. Он никогда не выбирал правильный ответ, поэтому мы никогда не узнаем. – Will

1

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

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

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