50分求解一个文件处理程序!!!

lishuiqing 2006-10-31 10:55:06
程序的目的很简单,读如一个二进制文件,如"1.txt(含有汉字的!!!)",在每行后面加个冒号和行号就行了。下面是我写的程序,奇怪的是第一次可以实现目的,如果这里将结果放在"2.txt"中,而第二次再对"2.txt"实施同样的步骤时,就不行了!!

****************************************************************************
例如“1.txt”中内容开始为"你"(就一个汉字“你”)
我的程序的“2.txt”为“你;1”
对"2.txt"再做同样的处理,就得到了"浣?1;1"——显然是个乱码了,大家看看我出错在什么地方了!!
****************************************************************************

自己感觉是在AddRowNum()函数里面的读文件时候出错了!!
不知道写文件(StreamWriter)的地方有问题没有?
大家帮忙啊!!!!!!!!!大家做这题的话,怎么做????
================================================================================
Console.WriteLine("Please input source file path:");
fileName=Console.ReadLine();
Console.WriteLine("Please input a destination Filename you want to put:");
desFileName=Console.ReadLine();
MyFileLibrary.AddRowNum(fileName,desFileName);
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
下面是我的主要的处理函数!
public static int AddRowNum( string fileName,string desFileName)
{
int temp = 1;
StreamReader sr=new StreamReader(fileName,System.Text.Encoding.Default);
String input;
StringBuilder newStrs = new StringBuilder(); //将文件内容放在StringBuilder
while ((input=sr.ReadLine())!=null) //每次读入文件的一行
{
if(input.Length!=0)
{//自己感觉这里面有问题!!!!!!
string s = input+";"+temp.ToString()+"\n";
char[] chrs = s.ToCharArray();
newStrs.Append( chrs );
temp++;
}
}
newStrs.Remove(newStrs.Length-1,1);
sr.Close();

StreamWriter sw = File.CreateText(desFileName);
string delimStr = "\n";
char [] delimiter = delimStr.ToCharArray();
string[] newStrings = newStrs.ToString().Split(delimiter);
foreach(string s in newStrings)
{
sw .WriteLine(s);
}
sw.Close();
return 1;
}
else
Console.WriteLine("Can not find file,please check your .");
return -1;
}
...全文
137 4 打赏 收藏 举报
写回复
4 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
lishuiqing 2006-11-01
  • 打赏
  • 举报
回复
太谢谢四楼的了,我马上试一下~~先给你20分,再说声谢谢!!!
jointan 2006-10-31
  • 打赏
  • 举报
回复
你的AddRowNum的代码太复杂,delimStr = "\n"后会在目标文件中重复写入两个"\r",最主要的是你没在sw的构造函数中指定编码方式,导致在没有Unicode格式文本文件头(0xEF,0xBB,0xBF共三字节)的空文件中写入了Unicode编码的数据,所以记事本记不懂这种文本文件(记事本对于没有编码头的文件,则认为它的编码是ANSI).
把你的函数改成下面的OK?
public static int AddRowNum(string fileName, string desFileName)
{
System.IO.TextReader reader = new System.IO.StreamReader(fileName,Encoding.Default);
System.IO.StreamWriter writer = new System.IO.StreamWriter(desFileName,false,Encoding.Default );
string text;
int i=0;
while (null != (text= reader.ReadLine()))
{
writer.WriteLine("{0};{1}", text, ++i);
}
reader.Close();
writer.Close();
return 1;
}
liujia_0421 2006-10-31
  • 打赏
  • 举报
回复
TO:程序的目的很简单,读如一个二进制文件
问题就出在这里了,你操作的是二进制文件的话,建议不要使用streamWriter or StreamReader因为它们主要用来处理字符的,可以使用FileStream.

楼主试下看,有问题再交流吧...
股神 2006-10-31
  • 打赏
  • 举报
回复
顶..,.,,,,.
相关推荐
发帖
C#

10.8w+

社区成员

.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
帖子事件
创建了帖子
2006-10-31 10:55
社区公告

让您成为最强悍的C#开发者