2009-11-23 4 views
0

J'ai quelques difficultés avec le flux. J'utilise FileStream et BinaryReader et j'ai des comportements étranges. Tout d'abord (et c'était sur une autre question, quand j'ai utilisé StreamReader j'ai eu un comportement bizarre que quand j'ai fait Peek la psoition a été changée, donc j'ai utilisé BinaryReader ce qui allait bien) MAINTENANT j'ai un problème quand je fais Seek (using bien sûr le flux de base sous-jacent - FileStream) PARFOIS cela fonctionne bien (arriver à la bonne position) mais parfois il saute juste à une position qui dépasse la longueur du fichier, ça n'arrive pas tout le temps, par exemple j'ai un problème pour arriver à une position à 1233 * 267, mais un jour plus tard c'était bien et le problème était à un autre endroit.comportement bizarre de chercher C#

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

et SEEK partie:

m_fsReader.Seek(offset, SeekOrigin.Begin); 

Merci,

+0

pouvez-vous exécuter votre programme en changeant FileShare.ReadWrite à FileShare.None? –

+0

spellcheck et reformatez votre question. – leppie

+0

Je peux changer le FileShare. Peut-être que cette inormation devrait aider, le processus écrit dans le fichier, mais parfois j'entre et ajoute des données au fichier. Quand le système fait la recherche est seulement une fois quand il commence le processus. –

Répondre

0

Il est difficile de dire, mais je suis tout à fait sûr que ce soit si l'on travail de jour et l'autre, il ne prend pas en probabilité le fichier a été modifié. En ce qui concerne la méthode de recherche, elle vous permet de rechercher n'importe quel endroit au-delà de la longueur du flux.

De MSDN:

Vous pouvez chercher à tout endroit au-delà de la longueur du cours d'eau. Lorsque vous recherchez au-delà de la longueur du fichier, la taille du fichier augmente.

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

1

J'ai remarqué que chaque flux garder sa propre position. Lorsqu'un flux est construit à partir d'un autre flux, la position est initialement la même; mais si le second flux recherche, il ne synchronise pas sa position de flux de base. Essayez de regarder la propriété Position des deux flux après lecture et opération de recherche. Vous verrez des différences entre l'opération et la valeur de position du flux de base.

J'ai résolu ce problème en m'appelant Seek sur le flux de base après le travail effectué par un sous-flux.