写入文本文件并在特定位置开始

问题描述:

我编写了一个程序来创建一个文件类型。规范表明,我必须有一定的限定因素,因为同一行上的字符串对它们的可能长度和它们的起始位置有限制。写入文本文件并在特定位置开始

例如,

我想写一个文本文件。

第一行应显示“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

可以使用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();