日期:2014-05-18  浏览次数:21411 次

如何读取一个字节流byte[]生成txt文件?
我在做一些web的设计,功能之一是要在网页上上传txt文件,然后服务器端读取它生成一个字节流,然后调用一个WebService把这个字节流变成txt文件,并对这个文件按照固定格式读取部分数据,并生成一个XML文件。

我的最终目的是得写入了所需数据的XML文件。

现在碰到的难题是:如何把我所得到的字节流变成txt文件?

我可以用下面的代码对一个实际存在、有文件路径的文件进行按行读取:
  string strLine = "";
  StreamReader sr = new StreamReader("文件路径");
  ArrayList al = new ArrayList();
  while (strLine != null)
  {
  strLine = sr.ReadLine();
  al.Add(strLine);
  }


然后在下面的代码中,我已经得到了字节流,但只能把这个字节流解码后放进到字符串变量中。可是怎么做才能把字节流解码了写入一个txt文本中呢?而这个txt文本文件我又不需要真正生成后保存在服务器硬盘上,我只是想使用readline()来读取其中的数据。


  //上传按钮触发事件,读取txt并显示内容到textbox1中
  protected void Button1_Click(object sender, EventArgs e)
  {
  //获取完整长文件名(短文件名+扩展名)
  string fileName = this.FileUpload1.PostedFile.FileName.ToString();

  //上传文件的大小(byte)
  int fileLength = this.FileUpload1.PostedFile.ContentLength;

  //获取文件的短文件名
  string frontFileName = Path.GetFileNameWithoutExtension(this.FileUpload1.PostedFile.FileName);

  //获取文件的扩展名
  string fileExt = fileName.Substring(fileName.LastIndexOf("."));

  //重新设置一个新的完整长文件名,格式为:短文件名+上传时间+扩展名
  fileName = "\\" + frontFileName + DateTime.Now.ToString("yyyyMMddhhmmss") + fileExt;


  //使用新文件名将文件保存到服务器的项目文件夹upload中
  try 
  {
  //文件保存
  FileUpload1.PostedFile.SaveAs(HttpRuntime.AppDomainAppPath + @"\upload\" + fileName);
  string fileurl = HttpRuntime.AppDomainAppPath + @"\upload\" + fileName;
  Response.Write("文件上传成功");

  //读取文件,获得字节流
  FileStream fs = new FileStream(fileurl, FileMode.Open);
  long i = fs.Length;
  byte[] b = new byte[i]; 
fs.Read(b, 0, Convert.ToInt32(b.Length)); //得到所要的字节流b
  UTF8Encoding temp = new UTF8Encoding(true);
  string data = temp.GetString(b);//字节流被解码并放入到一个字符串中
  fs.Close();
   

  }
  catch (Exception exc) 
  {
  Response.Write("文件上传错误,原因:"+exc.ToString()); 
  }


------解决方案--------------------
static void Main(string[] args)
{
byte[] byData;
char[] charData;

try
{
FileStream aFile = new FileStream("Temp.txt", FileMode.Create); //创建新文件,若存在原文件则先删除。
charData = "My pink half of the drainpipe.".ToCharArray(); //创建字符数组
byData = new byte[charData.Length];
Encoder e = Encoding.UTF8.GetEncoder(); //基于UTF8编码模式创建Encoder对象,即Unicode编码模式
e.GetBytes(charData, 0, charData.Length, byData, 0, true); //将字符数组并转换为字节数据

// Move file pointer to beginning of file
aFile.Seek(0, SeekOrigin.Begin);
aFile.Write(byData, 0, byData.Length); //将字节数据写入文件
}
catch (IOException ex)
{
Console.WriteLine("An IO exception has been thrown!");
Console.WriteLine(ex.ToString());
Console.ReadKey();
return;
}
------