2011-11-07 19 views
1

我很難理解單詞「流的位置」。我的問題在某種程度上與流方法的概念相關Seek();這個方法確實讓我感到困惑,他們說它的目的是將流的位置設置爲一個給定的值,但是它的名字描述了seek操作而不是set操作。有沒有人清楚地明白這兩個詞是什麼和他們如何一起工作?感謝名單C#中的「在流中的位置」是什麼意思?

+0

它不是「流的位置」,而是「位置_流_」。 –

+0

Thanx糾正! – Xris

回答

4

將文件視爲一系列字節,並將流視爲該視圖上的一個視圖,並用光標標記當前位置 - 因此,當您讀取數據時,光標會前進。 Position屬性只是該遊標的位置。所以當你打開一個流時,它通常是0,而且當你讀它時會增加。對於查找流,你可以「倒帶」到流的開始與

stream.Position = 0; 

或者可能使用跳過10個字節:

stream.Position += 10; 

2

stream基本上是一個字節序列 - 的位置是該流是在該序列中的點

Seek要點是「跳」到流中的位置 - 的特定索引(又名位置),類似於在硬盤上進行搜索。用Seek你可以指定一個偏移量開始尋找,所以有多少字節要「跳」。

1

下面的語句2做完全相同:

s.Position = 100; 
s.Seek(100, SeekOrigin.Begin); 

而且他們都確定位置(作爲一個ByteCount)在哪裏下一個讀或Wri te會發生。

Seek()這個名字很古老。

+0

嘿Henk!你能向我解釋SeekOrigin的全部內容嗎?說s.Seek(100,SeekOrigin.End);它會設置從流結束開始的光標嗎? – Xris

+0

是的。我認爲這些名字是非常漂亮的自我描述。你很少需要它們(因此Seek())。只需使用'Positon'。 –

0

我實際上同意,乍一看,Seek不是它所做的最好的名字。 SeekAndSetSeekAndMove會對我更有意義,因爲這就是該方法的作用 - 它在流中查找想要的位置並將光標設置到該位置。

但是,當您在計算機科學術語中考慮關於硬盤驅動器的Seek時,很明顯這種方法會起什麼作用。它尋求並移動到該位置。