操作文件File类方法

来源:互联网 发布:黑色星期五淘宝打折么 编辑:程序博客网 时间:2024/05/17 18:02

文件操作

File.Copy(“source”, “targetFileName”, true);//文件拷贝,true表示当文件存在时“覆盖”,如果不加true,则文件存在报异常。
File.Exists();//判断文件是否存在
File.Move(“source”,“target”);//移动(剪切),思考如何为文件重命名?文件的剪切是可以跨磁盘的。
File.Delete(“path”);//删除。如果文件不存在?不存在,不报错
File.Create(“path”);//创建文件

File.ReadAllLines(“path”,Encoding.Default);//读取所有行,返回string[]
File.ReadAllText(“path”,Encoding.Default);//读取所有文本返回string
File.ReadAllBytes(“path”);//读取文件,返回byte[],把文件作为二进制来处理。
l===========================================
File.WriteAllLines(“path”,new string[4] ,Encoding.Default);//将string数组按行写入文件。
File.WriteAllText(“path”,“string”);//将字符串全部写入文件
File.WriteAllBytes(“path”,newbyte[5]);//将byte[]全部写入到文件
File.AppendAllText()//将string追加到文件

文件流操作
FileStream fs=File.Open(); //返回FileStream 
FileStream fs=File.OpenRead();//返回只读的FileStream
FileStream fs=File.OpenWrite();//返回只写的FileStream
FileStream fs=new FileStream(参数);

Stream(所有流的父类,是一个抽象类。)
文件操作的类都在System.IO.*;

拷贝文件的两种方式:将源文件内容全部读到内存中,再写到目标文件中;读取源文件的1KB内存,写到目标文件中,再读取源文件的1KB内存,再写到目标文件中……。第二种方式就是一种流的操作。
l用File.ReadAllText、File.WriteAllText进行文件读写是一次性读、写,如果文件非常大会占内存、慢。需要读一行处理一行的机制,这就是流(Stream)。Stream会只读取要求的位置、长度的内容。
Stream不会将所有内容一次性读取到内存中,有一个指针,指针指到哪里才能读、写到哪里。
流有很多种类,文件流是其中一种。FileStream类newFileStream(“c:/a.txt”, filemode,fileaccess)后两个参数可选值及含义自己看。FileStream可读可写。可以使用File.OpenRead、File.OpenWrite这两个简化调用方法。
byte[]是任何数据的最根本表示形式,任何数据最终都是二进制。
FileStream的Position属性为当前文件指针位置,每写一次就要移动一下Position以备下次写到后面的位置。Write用于向当前位置写入若干字节,Read用户读取若干字节。

使用FileStream写入文本文件。
通过FileStream写入读取文本文件。对于中文如果每次读取1个byte会有什么效果?更好的选择→StreamReader
使用FileStream读取文本文件。
使用FileStream进行大文件拷贝。
File.ReadAllBytes()与File.WriteAllBytes()进行文件拷贝。(查看内存使用情况)
使用using可以方便的释放资源(自动调用Dispose方法)
只有实现了IDispose接口的类才能使用using释放资源 

Stream把所有内容当成二进制来看待,如果是文本内容,则需要程序员来处理文本和二进制之间的转换。
用StreamWriter可以简化文本类型的Stream的处理
StreamWriter是辅助Stream进行处理的
 using (StreamWriter writer = new StreamWriter(stream, encoding))
 {
      writer.WriteLine("你好");
 }


和StreamWriter类似, StreamReader简化了文本类型的流的读取。
 Stream stream = File.OpenRead("c:/1.txt");
   using (StreamReader reader = new StreamReader(stream,encoding))
            {
                //Console.WriteLine(reader.ReadToEnd());
                Console.WriteLine(reader.ReadLine());
            }
ReadToEnd用于从当前位置一直读到最后,内容大的话会占内存;每次调用都往下走,不能无意中调用了两次
ReadLine读取一行,如果到了末尾,则返回null。

产生乱码的原因(只有文本文件才会乱码):文本文件存储时采用的编码,与读取时采用的编码不一致,就会造成乱码问题。解决:采用统一的编码就ok.
文本文件编码,文本文件有不同的存储方式,将字符串以什么样的形式保存为二进制,这个就是编码,UTF-8、ASCII、Unicode等,如果出现乱码一般就是编码的问题,文本文件相关的函数一般都有一个Encoding类型的参数,取得编码的方式:Encoding.Default、Encoding.UTF8、Encoding.GetEncoding("GBK")
文件编码(码表)
ASCII:英文码表,每个字符占1个字节。
GB2312:兼容ASCII,包含中文。每个英文占一个字节(正数),中文占两个字节(负数)
GBK:简体中文,兼容gb2312,包含更多汉字。英文占1个字节(正数),中文占两个(1个负数,1个可正可负)
Big5:繁体中文
Unicode:国际码表,中文英文都站2个字节。
UTF-8:国际码表,英文占1个字节,中文占3个字节。l输出Encoding.GetEncodings(),所有编码。
什么是文本文件。拖到记事本中还能看得懂的就是文本文件,doc不是。
File类的常用静态方法:(FileInfo*)
voidAppendAllText(string path, string contents),将文本contents附加到文件path中
bool Exists(string path)判断文件path是否存在
string[]ReadAllLines(string path) 读取文本文件到字符串数组中
stringReadAllText(string path) 读取文本文件到字符串中
voidWriteAllText(string path, string contents)将文本contents保存到文件path中,会覆盖旧内容。
WriteAllLines(string path,string[] contents),将字符串数组逐行保存到文件path中,会覆盖旧内容。

正数对应的二进制取反 ,再加1就是负数的二进制。
Encoding.Default

System.Text.DBCSCodePageEncoding双字节字符集。如果输出EncodingName的话,结果为:简体中文(gb2312)

Encoding.Default:与操作系统的当前“区域与语言选项”有关。

 ////如果系统中没有提供编码,则可以通过GetEncoding("编码的额字符串表示")获得该编码。

            //Encodingencoding=Encoding.GetEncoding("gb2312");

            StringBuildersb =newStringBuilder();

            EncodingInfo[]infos = System.Text.Encoding.GetEncodings();

            for(inti = 0; i < infos.Length; i++)

            {

                sb.Append(infos[i].CodePage +"   "+ infos[i].DisplayName +"   "+ infos[i].Name +"\r\n");

            }

            File.WriteAllText("encodings.txt",sb.ToString());



本文来源为网络,非本人所著。
0 0