2009-11-23 49 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來運行程序嗎? – 2009-11-23 06:31:25

+0

拼寫檢查並重新格式化您的問題。 – leppie 2009-11-23 06:33:26

+0

我可以更改FileShare。也許這個知識應該有所幫助,這個過程寫入文件,但有時候我輸入並將DATA添加到文件中。系統在啓動進程時僅查找一次。 – 2009-11-23 06:42:33

回答

0

這是很難說,但我敢肯定那就是如果有一天的工作,另一個是不概率文件已經變了。

關於Seek方法,它允許您尋找超出流長度的任何位置。

從MSDN:

您可以尋求超出流長度的任何位置。當您超出文件長度時,文件大小會增加。

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

1

我注意到,每個流保持了自己的地位。當從另一個流構造一個流時,該位置最初是相同的;但是如果第二個流尋道,它不會同步它的基本流位置。

嘗試在讀取和查找操作後觀察兩個流的Position屬性。您會看到操作與基礎流位置值之間的差異。

我通過在子流完成工作後調用我自己尋找基礎流來解決此問題。