2017-06-01 18 views
0

我需要將數據追加到文件,但是如果文件不存在,我需要在追加之前添加標題。用於附加的打開文件是新的指示

如果我用FileMode.Append打開文件,我看不到一種方法來確定文件是否爲新文件。

如果我打開與

FileStream file; 
boolean isNew; 
try 
{ 
    file = File.Open(path, FileMode.CreateNew); 
    isNew = true; 
} 
catch (IOException ex) 
{ 
    file = File.Open(path, FileMode.Append); 
    isNew = false; 
} 

我碰到另一個進程刪除了2個開放式電話和沒有檢測到新文件的創建的文件的風險的文件。

如果創建或附加,打開附件和檢測的建議方式是什麼?

+1

檢查文件是否存在。如果存在,則附加。如果不是,請創建 – Pikoh

+0

您可以不使用[File.AppendText(string)](https://msdn.microsoft.com/de-de/library/system.io.file.appendtext(v = vs.110).aspx )? –

+0

不,需要追加二進制數據 – bsagal

回答

5

這是不是你所需要的?

try 
{ 
    var file = File.Open(path, FileMode.OpenOrCreate, FileAccess.ReadWrite); 

    if (file.Length == 0) 
    { 
     // do header stuff 
    } 

    // do the rest 
} 
catch (IOException ex) 
{ 
    // handle io ex. 
} 
2

嘗試這樣:

if (!File.Exists(path)) 
{ 
    file = File.Open(path, FileMode.CreateNew); 
    isNew = true; 
    return;  
} 
// otherwise append to existing file 
file = File.Open(path, FileMode.Append); 
isNew = false; 
+1

這個問題是可以在你的'File.Exists(path)'和你創建它之間創建的文件。如果你像我在回答中那樣做,它就不會發生,因爲文件一旦被創建和/或打開就被鎖定。另外,如果文件*不存在,這將嘗試打開文件兩次,因爲第二個'File.Open'不在'else'塊中。 –

+0

@ rory.ap - 你錯過了if區塊結束時的回報。你的解決方案比較好,不過出於你的理由。 – PaulF

+0

@PaulF - 啊,是的,我確實想念那個。謝謝。 –

相關問題