读取数据使用FileStream类读取数据不像使用StreamReader和StreamWriter类读取数据那么容易,这是因为FileStream类只能处理原始字节(raw byey),这使得FileStream类可以用于任何数据文件,而不仅仅是文本文件,通过读取字节数据就可以读取类似图像和声音的文件。这种灵活性的代价是不能使用它直接读入字符串,而使用StreamWriter和StreaMeader类却可以这样处理,从是有几种转换类可以很容易地将字节数组转换为字符数组,或者进行相反的操作。Read()方法是从FileStream对象所指向的文件访问数据的主要手段:Public int Read(byte[] array,int offset, int count)//第一个参数是被传输进来的字节数组,用以接受FileStream对象中的数据。第二个参数是字节数组中开始写入数据的位置,它通常是0,表示从数组的开端的文件中向数组写数据,最后一个参数是规定从文件中读出多少字节。写入数据写入数据的流程是先获取字节数组,再把字节数据转换为字符数组,然后把这个字符数组用Write()方法写入到文件中,当然在写入的过程中,可以确定在文件的什么位置写入,写多少字符等等。 文件读写的范例: 读取文件 using System; using System.Collections.Generic; using System.Text; using System.IO;namespace myFile { class Program { static void Main(string[] args) { byte[] byData = new byte[100];//建立一个FileStream要用的字节组 char[] charData = new char[100];//建立一个字符组 try { FileStream aFile = new FileStream("../../../../Data.txt", FileMode.Open);//实例化一个FileStream对象,用来操作data.txt文件,操作类型是
aFile.Seek(55, SeekOrigin.Begin);//把文件指针指向,从文件开始位置向前55位字节所指的字节 aFile.Read(byData, 0, 100);//读取FileStream对象所指的文件到字节数组里 } catch (IOException e) { Console.WriteLine("close"); return; } Decoder d = Encoding.UTF8.GetDecoder();// d.GetChars(byData, 0, byData.Length, charData, 0);//将编码字节数组转换为字符数组 Console.WriteLine(charData); Console.ReadLine(); return; } } }写入文件: using System; using System.Collections.Generic; using System.Text; using System.IO;namespace myFile { class Program { static void Main(string[] args) { byte[] byData = new byte[100];//建立一个FileStream要用的字节组 char[] charData = new char[100];//建立一个字符组 try { FileStream aFile = new FileStream("../../../../Data.txt", FileMode.Open);//实例化一个FileStream对象,用来操作data.txt文件,操作类型是
◆StreamWriter对像 用FileWriter来随机读取文件是个好主意,而用StreamWriter可以直接把字符串写入文件中,它处理重要的转换和向FileStream对像写入工作。创建StreamWriter有很多方法:FileStream aFile = new FileStream(“Log.txt”,FileMode.CreatcNew);StreamWriter sw = new StreamWriter(aFile);也可直接从文件中创建StreamWriter对象: StreamWriter sw = new StreamWriter(“Log.txt”,true); 后面这个Boolean值规定是附加文件还是创建新文件,如果此值为false,则就创建一个新文件,或者截取现有文件并打开它。如果此值设置为true,则打开文件,保留原来的数据,如果找不到文件,则创建一个新文件。注意:当创建FileStream对象时,您无法得到选项的范围。除了使用Boolean值附加或创建新文件外,我们根本就无法像使用FileStream类时那样规定FileMode属性;而且,您也无法设置FileAccess属性.因此您总是具有对文件的读写特权,为了使用任何高级参数,您必须在FileStream构造函数中规定这些参数,然后在FileStream对象中创建StreamWriter。 例: using System; using System.Collections.Generic; using System.Text; using System.IO;namespace StreamWriterFile { class Program { static void Main(string[] args) { try { FileStream aFile = new FileStream("data1.txt", FileMode.OpenOrCreate);//建立一个fileStream对象 StreamWriter sw = new StreamWriter(aFile);//用FileStream对像实例一个StreamWriter对象
sw.Write("first."); sw.WriteLine("hello world!!!");//写入字符串,方法WriteLine写入时后面跟一个换行符 sw.Write("This is a");//写入字符串,方法Write写入时没有换行符 sw.Write("string of characters."); sw.Close();//用完后必须关闭对像 } catch (IOException e) { Console.WriteLine(e.ToString()); } } } } ◆StreamReader对象 1.读取文件输入流用于从外部源读取数据,在很多情况下,数据源可以是磁盘上的文件或网络的某些位置,任何可能发送数据的位置都可以是数据源,比如网络应用程序,web服务,甚至是控制台。StreamReader是一个通用类,可以用于任何流;StreamReader对象的创建方式非常类似于StreamWriter对象的创建方式。StreamWriter类有两个基本的方法read和readLineRead()方法将流的下一个字符作为正整数值返回,如果到达了流的结尾处,则返回-1ReadLing()方法是读取并返回一行字符,如果返回为空,那么就是到达了流的结尾。ReadEnd()方法读小文件最好,它直接读取完整的文件并作为字符串返回。 例: using System; using System.Collections.Generic; using System.Text; using System.IO;namespace StreamReaderTest { class Program {
static void Main(string[] args) { string strLine; try { Console.Write("请输入文件路径及文件名:"); string mess = Console.ReadLine(); FileStream aFile = new FileStream(mess, FileMode.Open); StreamReader sr = new StreamReader(aFile);//用FileStream对象实例化一个StreamReader对象 //strLine = sr.ReadToEnd();//读取完整的文件,如果用这个方法,就可以不用下面的while循环 strLine = sr.ReadLine();// 读取一行字符并返回 while (strLine != null) { Console.WriteLine(strLine); strLine = sr.ReadLine(); } sr.Close(); Console.ReadLine(); } catch (IOException e) { Console.WriteLine("an IOexception has been thrown!"); Console.WriteLine(e.ToString()); return; } return; } } } 2.分隔文件读取使用逗号分隔的文件,string类提供了一种称为Split()的方法,可以用于将字符串按照提供的分隔符分隔成字符组. 例: using System; using System.Collections.Generic; using System.Text; using System.IO;namespace CommaValues { class Program { static void Main(string[] args) { while (true) { string strLine; string[] strArray; char[] charArray = new Char[] { ',' }; Console.Write("请输入文件内容以逗号分隔的文件路径及文件名:"); string name = Console.ReadLine(); try { FileStream aFile = new FileStream(name, FileMode.Open); StreamReader sr = new StreamReader(aFile); strLine = sr.ReadLine(); while (strLine != null) { strArray = strLine.Split(charArray); for (int x = 0; x <= strArray.GetUpperBound(0); x++) { Console.WriteLine(strArray[x].Trim()); } strLine = sr.ReadLine(); } sr.Close(); //Console.ReadLine(); } catch (IOException e) { Console.WriteLine(e.ToString()); return; } //return; } } } }
{
FileStream outFile;
byte[] binaryData;
binaryData = System.Convert.FromBase64String(sString);
outFile = new FileStream(sFilePath,FileMode.Create,FileAccess.Write);
outFile.Write(binaryData, 0, binaryData.Length);
outFile.Close();
} public static string FileToString(string sFilePath)
{
FileStream inFile;
byte[] binaryData;
inFile = new FileStream(sFilePath,FileMode.Open,FileAccess.Read);
binaryData = new Byte[inFile.Length];
long bytesRead = inFile.Read(binaryData, 0,(int)inFile.Length);
inFile.Close();
return System.Convert.ToBase64String(binaryData, 0,binaryData.Length);
} 应该能看懂得吧^0^
读取文件
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;namespace myFile
{
class Program
{
static void Main(string[] args)
{
byte[] byData = new byte[100];//建立一个FileStream要用的字节组
char[] charData = new char[100];//建立一个字符组 try
{
FileStream aFile = new FileStream("../../../../Data.txt", FileMode.Open);//实例化一个FileStream对象,用来操作data.txt文件,操作类型是
aFile.Seek(55, SeekOrigin.Begin);//把文件指针指向,从文件开始位置向前55位字节所指的字节
aFile.Read(byData, 0, 100);//读取FileStream对象所指的文件到字节数组里
}
catch (IOException e)
{
Console.WriteLine("close");
return;
}
Decoder d = Encoding.UTF8.GetDecoder();//
d.GetChars(byData, 0, byData.Length, charData, 0);//将编码字节数组转换为字符数组 Console.WriteLine(charData);
Console.ReadLine();
return;
}
}
}写入文件:
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;namespace myFile
{
class Program
{
static void Main(string[] args)
{
byte[] byData = new byte[100];//建立一个FileStream要用的字节组
char[] charData = new char[100];//建立一个字符组 try
{
FileStream aFile = new FileStream("../../../../Data.txt", FileMode.Open);//实例化一个FileStream对象,用来操作data.txt文件,操作类型是
charData = "我是谁?111?".ToCharArray();//将字符串内的字符复制到字符组里
aFile.Seek(0, SeekOrigin.End);
Encoder el = Encoding.UTF8.GetEncoder();//编码器
el.GetBytes(charData, 0, charData.Length, byData, 0, true); aFile.Write(byData, 0, byData.Length);
}
catch (IOException e)
{
Console.WriteLine("close");
return;
}
}
}
}
例:
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;namespace StreamWriterFile
{
class Program
{
static void Main(string[] args)
{
try
{
FileStream aFile = new FileStream("data1.txt", FileMode.OpenOrCreate);//建立一个fileStream对象
StreamWriter sw = new StreamWriter(aFile);//用FileStream对像实例一个StreamWriter对象
sw.Write("first.");
sw.WriteLine("hello world!!!");//写入字符串,方法WriteLine写入时后面跟一个换行符
sw.Write("This is a");//写入字符串,方法Write写入时没有换行符
sw.Write("string of characters.");
sw.Close();//用完后必须关闭对像
}
catch (IOException e)
{
Console.WriteLine(e.ToString());
}
}
}
}
◆StreamReader对象 1.读取文件输入流用于从外部源读取数据,在很多情况下,数据源可以是磁盘上的文件或网络的某些位置,任何可能发送数据的位置都可以是数据源,比如网络应用程序,web服务,甚至是控制台。StreamReader是一个通用类,可以用于任何流;StreamReader对象的创建方式非常类似于StreamWriter对象的创建方式。StreamWriter类有两个基本的方法read和readLineRead()方法将流的下一个字符作为正整数值返回,如果到达了流的结尾处,则返回-1ReadLing()方法是读取并返回一行字符,如果返回为空,那么就是到达了流的结尾。ReadEnd()方法读小文件最好,它直接读取完整的文件并作为字符串返回。
例:
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;namespace StreamReaderTest
{
class Program
{
static void Main(string[] args)
{
string strLine;
try
{
Console.Write("请输入文件路径及文件名:");
string mess = Console.ReadLine();
FileStream aFile = new FileStream(mess, FileMode.Open);
StreamReader sr = new StreamReader(aFile);//用FileStream对象实例化一个StreamReader对象
//strLine = sr.ReadToEnd();//读取完整的文件,如果用这个方法,就可以不用下面的while循环
strLine = sr.ReadLine();// 读取一行字符并返回
while (strLine != null)
{
Console.WriteLine(strLine);
strLine = sr.ReadLine();
}
sr.Close();
Console.ReadLine();
}
catch (IOException e)
{
Console.WriteLine("an IOexception has been thrown!");
Console.WriteLine(e.ToString());
return;
}
return;
}
}
}
2.分隔文件读取使用逗号分隔的文件,string类提供了一种称为Split()的方法,可以用于将字符串按照提供的分隔符分隔成字符组.
例:
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;namespace CommaValues
{
class Program
{
static void Main(string[] args)
{
while (true)
{
string strLine;
string[] strArray;
char[] charArray = new Char[] { ',' };
Console.Write("请输入文件内容以逗号分隔的文件路径及文件名:");
string name = Console.ReadLine(); try
{
FileStream aFile = new FileStream(name, FileMode.Open);
StreamReader sr = new StreamReader(aFile); strLine = sr.ReadLine();
while (strLine != null)
{
strArray = strLine.Split(charArray);
for (int x = 0; x <= strArray.GetUpperBound(0); x++)
{
Console.WriteLine(strArray[x].Trim());
}
strLine = sr.ReadLine();
}
sr.Close();
//Console.ReadLine();
}
catch (IOException e)
{
Console.WriteLine(e.ToString());
return;
}
//return;
}
}
}
}