2012-04-21 2 views
0

В настоящее время я работаю над проектом C#, где мне нужно записать содержимое в файл. Пока файл записывается, отдельный поток обращается к файлу, чтобы получить размер файла, поэтому иногда, когда я пишу в файл, он блокируется, так как проверка размера файла блокирует файл.Запись в буфер перед записью в файл, чтобы избежать блокировки

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

Другая проблема: мне нужно добавить параметр, чтобы при записи в файл он записывал в правильный файл, так как моя программа получает вход из нескольких мест, поэтому мне нужно сохранить это значение где-то в буфере, но из того, что я видел в потоках, вы можете писать строки только.

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

Спасибо за любую помощь, которую вы можете предоставить.

+2

Возможно, вместо буфера вам понадобятся [блокировки] (http://msdn.microsoft.com/en-us/library/c5kehkcz.aspx). –

+0

И вместо того, чтобы иметь один буфер, иметь один буфер на выходной файл. –

ответ

0

Объявление класса с буферным пространством и спецификацией файла. Создайте один для каждой записи и поставите его в поток записи BackgroundWorker. Поток удаляет экземпляр буфера и записывает файл с подходящим циклом цикла sleep(), чтобы гарантировать, что всякая временная блокировка файлов будет работать.

Вы можете использовать BlockingCollection для очереди.

0

Получение длины файла не должно блокировать файл. Как вы делаете эту операцию?

Если вы используете буфер, операция проверки длины больше не даст вам правильного значения.

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