2009-11-23 3 views
0

У меня есть некоторые трудности с потоком. Я использую FileStream и BinaryReader, и у меня появилось какое-то странное поведение. Прежде всего (и это было по другому вопросу, когда я использовал StreamReader, я получил странное поведение, что, когда я сделал Peek, psoition был изменен, поэтому я использовал BinaryReader, который был в порядке) СЕЙЧАС У меня есть проблема, которая иногда, когда я искал (используя конечно базовый поток - FileStream). ИМЕЕТ, что он отлично работает (добирается в нужное положение), но иногда он просто перескакивает в позицию, которая выходит за пределы длины файла. Это происходит не всегда, например, у меня была проблема чтобы добраться до позиции 1233 * 267, но через день все было хорошо, и проблема была в другом месте.странное поведение поиска C#

FileStream m_fsReader = new FileStream(m_strDataFileName, FileMode.Open,   FileAccess.Read, FileShare.ReadWrite); 
BinaryReader m_brReader = new BinaryReader(m_fsReader); 

и искать часть:

m_fsReader.Seek(offset, SeekOrigin.Begin); 

Спасибо,

+0

Вы можете запустить свою программу, изменив FileShare.ReadWrite на FileShare.None? –

+0

проверка орфографии и переформатирование вопроса. – leppie

+0

Я могу изменить FileShare. Возможно, эта обработка должна помочь, процесс записывается в файл, но иногда я вхожу и добавляю DATA в файл. Когда система выполняет поиск только один раз, когда начинается процесс. –

ответ

0

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

Что касается метода поиска, это позволяет вам искать любое место за пределами длины потока.

Из MSDN:

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

http://msdn.microsoft.com/en-us/library/system.io.filestream.seek.aspx

1

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

Попробуйте посмотреть свойство Position обоих потоков после операции поиска и поиска. Вы увидите расхождения между операцией и значением позиции базового потока.

Я решил эту проблему, называя себя Искай по базовому потоку после работы, выполняемой подпотоком.

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