2015-01-04 95 views
1

我編寫了一個程序來創建一個文件類型。規範表明,我必須有一定的限定因素,因爲同一行上的字符串對它們的可能長度和它們的起始位置有限制。寫入文本文件並在特定位置開始

例如,

我想寫一個文本文件。

第一行應顯示「TEST1」字符串,該字符串將從第一行的0位置開始,並創建總計數爲10的空間。所以字符串後面會有5個空格。

在第11個位置的同一行上,它會寫入「TEST2」,總計數爲10,因此字符串後面會有5個空格。

「TEST1」和「TEST2」的字符串可以隨時從1-10個字符改變。

我已經試過的String.format(「{0,10}」,看來,它允許終止在第10位,但不是我所期待的。

這是一個FNMA文件。

+1

使用File.Seek()方法設置你想從哪裏開始寫的位置 – erem 2015-01-04 14:46:46

+0

你應該嘗試'String.Format(「{0,-10}」,...)',或者更好的辦法是使用「StreamWriter」的等效方法。但要小心:如果字符串比指定的寬度長,它會溢出並且錯位所有下列字段。 – 2015-01-04 15:06:15

+0

您應該決定在所有字符具有相同字節數的情況下使用編碼,例如ASCII或UTF-16。如果您使用UTF-8,那麼可能無法預測10個字符需要多少個字節。 – RenniePet 2015-01-04 18:53:54

回答

0

可以使用AREADY建議的方法,但你必須知道,如果該文件是在UTF-8格式,你需要跳過UTF-8 BOM (header),你可以用UTF8Encoding.GetPreamble Method獲取和傳遞編碼構造true becasue被默認你止跌」對於ASCII文件,偏移量爲0.

var value = string.Format("{0,-10}", "TEST33"); 

FileStream fs = File.OpenWrite("test.txt"); 

System.Text.UTF8Encoding enc = new System.Text.UTF8Encoding(true); 
int preamble = enc.GetPreamble().Length; 
var bytes = enc.GetBytes(value); 

fs.Seek(preamble, SeekOrigin.Begin); 
fs.Write(bytes, 0, bytes.Length); 

fs.Close(); 
相關問題