C# 使用StreamReader和StreamWriter修改文件

C# 使用StreamReader和StreamWriter修改文件,c#,file-io,ssis,streamreader,streamwriter,C#,File Io,Ssis,Streamreader,Streamwriter,我试图使用StreamReader和StreamWriter打开一个文本文件(固定宽度)并修改一些特定的数据列。我有以下格式的日期将被转换为压缩的COMP-3字段 020100718F 020100716F 020100717F 020100718F 020100719F 我希望能够使用StreamReader读取文件中的日期,然后将其转换为压缩字段(5个字符),然后使用StreamWriter输出。然而,我还没有找到一种方法来使用StreamWriter来调整到一个特定的位置,我开始怀疑这是

我试图使用StreamReader和StreamWriter打开一个文本文件(固定宽度)并修改一些特定的数据列。我有以下格式的日期将被转换为压缩的COMP-3字段

020100718F
020100716F
020100717F
020100718F
020100719F
我希望能够使用StreamReader读取文件中的日期,然后将其转换为压缩字段(5个字符),然后使用StreamWriter输出。然而,我还没有找到一种方法来使用StreamWriter来调整到一个特定的位置,我开始怀疑这是否可行

我有以下代码剪掉它

System.IO.StreamWriter writer;

this.fileName = @"C:\Test9.txt";
reader = new System.IO.StreamReader(System.IO.File.OpenRead(this.fileName));

currentLine = reader.ReadLine();
currentLine = currentLine.Substring(30, 10);    //Substring Containing the Date
reader.Close();

...
// Convert currentLine to Packed Field 
...

writer = new System.IO.StreamWriter(System.IO.File.Open(this.fileName, System.IO.FileMode.Open));
writer.Write(currentLine);
目前我所拥有的功能如下:

After:
!@#$%0718F
020100716F
020100717F
020100718F
020100719F 

!@#$% = Ascii Characters SO can't display 
有什么想法吗?谢谢

更新 关于压缩字段COMP-3的信息

COBOL系统使用压缩字段来减少文件中字段所需的字节数。有关更多信息,请参阅以下SO帖子:

这是包装在COMP-3中的以下日期“20120123”的图片。这是我的最终结果,我之所以将其包括在内,是因为我不确定这是否会影响可能的答案

我的问题是如何让StreamWriter动态替换文件中的数据并更改行的长度

然而,我还没有找到一种方法来使用StreamWriter来定位特定的位置,并且 开始怀疑这是否可能

你可以使用这个方法


我总是发现读取输入文件、过滤/处理数据并将输出写入临时文件更好。完成后,删除原始文件(或进行备份)并复制临时文件。这样你就不会丢失一半的输入文件,以防在处理过程中出错。

你可能应该直接使用流(可能是FielestRAM)。这将允许您更改位置


但是,您不能以这种方式更改记录大小,至少不能在线更改。您可以让一个流读取原始文件,另一个流写入文件的新转换副本。

我似乎找不到您真正的问题是什么。如果您解释什么是压缩COMP-3数据字段,可能会有所帮助。如果您告诉我们预期的结果,可能也会有所帮助。请不要在标题前加上“C”之类的前缀。这就是标记的用途。BCD编码后,您将获得二进制数据。不要使用StreamWriter将其写入文件,而是使用FileStream。根据编码的不同,这可能会有问题。您必须小心不要定位到多字节字符的中间。-1还有其他问题,如
刷新
。试试这个:
StreamWriter wr=newstreamwriter(File.Create(@“c:\temp\aaa.txt”);wr.Write(“ABC”);wr.BaseStream.Seek(0,SeekOrigin.Begin);wr.写(“Z”);wr.Close()输出不会是ZBC
using (StreamWriter wr = new StreamWriter(File.Create(@"c:\Temp\aaa.txt")))
{
   wr.Write("ABC");
   wr.Flush();
   wr.BaseStream.Seek(0, SeekOrigin.Begin);
   wr.Write("Z");                
}