如何读取一个字节流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;
}
------