2012-04-21 71 views
0

我目前正在一個C#項目,我需要將內容寫入文件。當正在寫入文件時,單獨的線程訪問文件以獲取文件大小,所以有時在寫入文件時,文件大小檢查將文件鎖定,因此文件被鎖定。寫入緩衝區之前寫入文件,以避免被鎖定

我在想做的是創建某種緩衝區,但每當我谷歌它回來的網絡流是不適合作爲它所有的本地。計劃是什麼,而不是直接寫入文件的線程,寫入某種緩衝區,單獨的線程檢查文件是否可寫,然後讀取緩衝區並將內容寫入文件。

另一個問題是我需要添加一個參數,以便當它寫入文件時寫入正確的文件,因爲我的程序正在接收來自多個位置的輸入,所以我需要將此值保留在緩衝區中的某處從我所看到的流中你只能寫字符串。

所以最基本的問題是如何寫入緩衝區,然後從緩衝區讀取數據,以便將其寫入文件並在緩衝區中保存參數,以便在寫入文件時知道哪個文件寫信給。

感謝您提供的任何幫助。

+2

也許不是緩衝區,你需要[locks](http://msdn.microsoft.com/en-us/library/c5kehkcz.aspx)。 – 2012-04-21 20:47:58

+0

而不是有一個緩衝區,每個輸出文件有一個緩衝區。 – 2012-04-22 00:16:27

回答

0

聲明具有緩衝區空間和文件規範的類。爲每次寫入創建一個,並將其排列到BackgroundWorker寫入線程。該線程將緩衝區實例取出,並使用合適的sleep()循環來寫入文件,以確保任何臨時文件鎖定都得到解決。

您可以使用BlockingCollection作爲隊列。

0

獲取文件的長度不應鎖定文件。你怎麼做這個手術?

如果你使用緩衝區,你的長度檢查操作將不會再給你正確的值。

相關問題