Многие программы пишут / читают один файл? - PullRequest
0 голосов
/ 27 февраля 2012

Я пишу приложение для обмена сообщениями на C #, которое работает на общем файловом сервере в сети. Программа работает несколькими пользователями, работающими с программой, которая обращается к файлу, который используется несколькими компьютерами. Следовательно, мне нужно использовать StreamReader / StreamWriter для доступа к файлу сразу несколькими программами (РЕДАКТИРОВАТЬ: теперь я знаю, что это не очень хороший способ сделать это, но это то, что мне было нужно в то время). Итак, как я могу получить доступ к одному файлу с несколькими программами, не получая ошибок об используемом файле?

Ответы [ 3 ]

2 голосов
/ 27 февраля 2012

Я думаю, что ваш подход приведет к проблемам в будущем.Я бы подумал об использовании Redis pub / sub на вашем месте.

Но, поскольку вы спросили ... (Я написал сообщение в блоге по этому поводу: http://procbits.com/2011/02/18/streamwriter-share-read-access-in-another-process/)

Генератор данных чата:

var fs = File.Open(@"C:\messages.txt", FileMode.Append, FileAccess.Write, FileShare.Read);
var sw = new StreamWriter(fs);
sw.AutoFlush = true;

Где-то еще в вашем приложении или другом приложении ...

Считыватели данных чата:

var fs = File.Open(@"C:\messages.txt", FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
var sr = new StreamReader(fs);
2 голосов
/ 27 февраля 2012

Если вам нужен один файл, в котором несколько пользователей / программ / объектов ... должны читать / писать, не мешая друг другу, я бы посоветовал рассмотреть (среди других решений) использование Sqlite как простой БДбэкенд.Не требуется установка или настройка сервиса.Просто используйте C# dlls и, в принципе, согласно вашим запросам, вы получите то, что вам нужно.

Один пользователь пишет в db file (ВСТАВИТЬ), другой может читать (ВЫБРАТЬ) из него.

0 голосов
/ 27 февраля 2012

Я думаю, вам следует дважды подумать об использовании текстового файла в качестве средства общения.
Это все равно, что просить проблемы.

Пожалуйста, обратите внимание на использование решения P2P вместо:
Одноранговый чат-чат
Простое приложение однорангового чата с использованием WCF netPeerTcpBinding

Это даст вам гораздо более подходящую архитектуру для ваших требований.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...