Streamwriter位置寻求

时间:2014-06-24 07:45:54

标签: c# .net stream position streamwriter

我试图将以下数据写入文本文件:

 TEXTed       00:01:27    8.0 xxxxxxx         Some test
 TEXTed       00:01:35  251.0 xxxxxxx         Some text

我正在使用streamwriter,首先构建我的字符串,然后写入文件:

                var v15timeString = item.Duration;
                var v15fileString = "             " + item.Time + "       ";
                v15SR.Write(v15fileString);
                var durLength = item.Duration.Length;
                v15SR.BaseStream.Position = -durLength;
                v15SR.WriteLine(item.Duration);

我遇到的问题是8.0,251.0如何注销这些问题。我希望在所有行中保持.0。通俗地说,这个专栏应该是正确对齐的。我在上面的代码中将其称为item.duration。

我通过执行streamreader.BaseStream.Position = -durLength进行了上述尝试,但.Position没有采用负数。如何根据durLength在v15filestring之后找回,然后写出item.Duration

请记住,我需要严格保持此列在文本文件中左对齐,如上面的示例所示。

请帮助。谢谢。

2 个答案:

答案 0 :(得分:0)

您可以使用PadLeft代替随机空格

例如

var v15fileString = item.Time.ToString().PadLeft(21);
//and
v15SR.WriteLine(item.Duration.ToString().PadLeft(8));

注意:正如Ian所说,最好首先构建字符串,然后写行

答案 1 :(得分:0)

String.Format允许您指定字段宽度以及其他许多选项。近似代码为:

 writer.Write(String.Format("{0,10} "{1, 15}", field1, field2));

摘自MSDN文章:

  

格式项的一般语法是:

{index[,alignment][: formatString]}
  

其中alignment是一个定义字段宽度的有符号整数。如果此值为负,则字段中的文本左对齐。如果是正数,则文本右对齐。

注意:如果writer没有刷新内容,尝试更新TextWriter内部流的位置可能无法正常工作。为utf8字符串(这是.Net测试编写者的默认编码)计算正确的字节偏移量是很大的痛苦。