2015-12-18 46 views
0

爲什麼在使用BinaryWriter時二進制文件的大小不會減少?在使用上述方法的bin.txt的大小爲8個字節爲什麼在使用BinaryWriter時二進制文件的大小不會減少

static void write() 
{ 
    BinaryWriter sr = new BinaryWriter(File.OpenWrite("bin.txt")); 
    int m; 
    m = 123456; 
    sr.Write(m); 
    m = 122; 
    sr.Write(m); 
    sr.Close(); 
} 

: 考慮這個第一代碼段。

但是,當我刪除m = 122和從函數調用第二個Write並再次運行程序,我期望文件大小改爲4個字節,但它仍然是8個字節。

static void write() 
{ 
    BinaryWriter sr = new BinaryWriter(File.OpenWrite("bin.txt")); 
    int m; 
    m = 123456; 
    sr.Write(m); 
    sr.Close(); 
} 

通過添加double類型而不是文件大小從8增加到12時運行在函數下面。

static void write() 
{ 
    BinaryWriter sr = new BinaryWriter(File.OpenWrite("bin.txt")); 
    int m; 
    m = 123456; 
    sr.Write(m); 
    double pp = 1233.00; 
    sr.Write(pp); 
    sr.Close(); 
} 
+3

請不要在你的文字爲每個字 - 這使得它真的* *難以閱讀。並且請在發佈之前查看預覽,以確保只有代碼被格式化爲代碼,並且它很好地縮進。 –

+0

當您正確測試(在每次運行之前刪除文件)結果將是您所期望的。 –

+0

@亨克霍爾特曼,是的我試過去除,而不是工作的好。但是我希望在不刪除文件的情況下工作 –

回答

6

這有什麼好做BinaryWriter,真的 - 這是File.OpenWrite通話,其文檔包括:

OpenWrite方法打開一個文件,如果一個已經存在的文件路徑,或創建新文件如果不存在。對於現有文件,它不會將新文本附加到現有文本。相反,它會用新字符覆蓋現有字符。如果用較短的字符串(例如「Second run」)覆蓋較長的字符串(例如「這是對OpenWrite方法的測試」),則該文件將包含字符串的混合(「OpenWrite方法的第二次運行測試「)。

所以你的第二個方法只寫四個字節 - 但它會覆蓋文件的前四個字節而不截斷文件本身。

改爲使用File.Create,任何現有文件都將被截斷。

我還建議你使用using語句,而不是手動關閉資源:

using (var writer = new BinaryWriter(File.Create("foo")) 
{ 
    // Code here, no need to call writer.Close() 
} 
相關問題