博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
.Net学习 第2季06 C#面向对象 Path类 File类 FileStream类 StreamReader/StreamWriter类
阅读量:5294 次
发布时间:2019-06-14

本文共 3036 字,大约阅读时间需要 10 分钟。

.Net 视频学习第2季 C#面向对象

 

面向对象 Path类 File类 FileStream类 StreamReader/StreamWriter类

Path类,命名空间System.IO,静态类

Path.GetFileName(str),返回文件路径中的文件名,返回值为string

Path.GetFileNameWithoutExtension(str),返回文件路径中的文件名,不带扩展名,返回值为string

Path.GetExtension(str),返回文件路径中的文件的扩展名,返回值为string

Path.GetDirectoryName(str),返回文件所在的全目录,返回值为string

Path.GetFullPath(str),返回文件的全路径,返回值为string

Path.Combine(str1,str2),将两路径连接在一起,返回值为string

实际上用字符串的操作也可以实现,现在这些功能已经封装起来成为一个静态类Path方便使用。

 

File类,命名空间System.IO,静态类

File.Exists(); --- 判断文件是否存在

File.Create(string path); --- 创建/修改已有文件

File.Delete(string path); --- 彻底删除指定文件

File.Copy(string old_path, string new_path); --- 复制文件到新路径

File.Move(string old_path, string new_path); --- 剪切文件到新路径

File.ReadAllBytes();

File.WriteAllBytes();

 

File.WriteAllLines(“path”, new string[4] ,Encoding.Default);//将string数组按行写入文件。

File.WriteAllText(“path”, “string”);//将字符串全部写入文件

File.WriteAllBytes(“path”,new byte[5]);//将byte[]全部写入到文件

File.AppendAllText();//将string追加到文件

 

Encoding类,字符串与字节数组相互转换的方法类

 

File.ReadAllBytes("path");//读取文件,返回byte[],把文件作为二进制来处理。

byte[] buffer = File.ReadAllBytes(string path);

string str1 = Encoding.GetEncoding("xxx").GetString(buffer);

string str2 = Encoding.utf8.GetString(buffer);

string str3 = Encoding.Default.GetString(buffer);

 

string[] contents = File.ReadAllLines(string path);//以行的形式读取

foreach (string item in contents)

{

  Console.WriteLine(item);

}

 

string str = File.ReadAllText(string path, Encoding.Default);//整个读取作为string

File.ReadAllLines和File.ReadAllText只适用于文本文件(返回值都是string或者string[]),分行处理用前者方便。

 

相对应也有File.WriteAllLines和File.WriteAllText,覆盖写入

不覆盖写入用File.AppendAllText

string str = "XXXXXX";

byte[] buffer = Encoding.Default.GetBytes(str);

File.WriteAllBytes(string path, buffer);

 

File类的上述方法占用了太多内存(一下子打开整个文件),可以选择使用FileStream类/StreamReader+StreamWriter的方法减轻内存的负担。

FileStream类操作字节(适用任何文件),StreamReader+StreamWriter操作字符串(仅适用文本文件)

FileStream类,命名空间System.IO,不是静态类!

FileStream fs = new FileStream(string path, FileMode, FileAccess);

FileMode和FileAccess枚举类型,前者是对文件做何操作(创建/打开/关闭/追加),后者是对文件内的数据做何操作(读写)

byte[] buffer = new byte[1024*1024*5];fs.Read(buffer, int offset, int count);

上述表示每次读入5M,count可以写为buffer.Length,如果不满5M,Read()返回的是有效的数据的字节数,注意fs读出来的数据还是5M

int r = fs.Read(buffer,0,buffer.Length);

同上,将字节数组按某指定的解码方式转为string,可以选择起始位置index和长度count

string str = Encoding.Default.GetString(buffer);
string str = Encoding.Default.GetString(buffer,index,count);

文件流使用后需要关闭

fs.Close();

关闭文件流后释放其占用的空间

fs.Dispose();

可以将创建文件流对象的过程写在using当中,会自动帮我们在完成文件流对象的操作之后释放内存

using(FileStream fs = new FileStream(string path, FileMode.OpenOrCreate,FileAccess.Write)){
  str = "XXXX";   byte[] buffer = Encoding.Default.GetBytes(str);  fs.Write(buffer, 0, buffer.Length);}

 

StreamReader和StreamWriter类,命名空间System.IO,非静态类!

同样可以用using来自动关闭释放

using(StreamReader sr = new StreamReader(string path, Encoding.Default)){
  while(!sr.EndOfStream)   {
    Console.WriteLine(sr.ReadLine());   } } using(StreamWriter sw = new StreamWriter(string path, bool append)) {
  sw.Write("XXX"); }

 

转载于:https://www.cnblogs.com/cyrus-ho/p/4150331.html

你可能感兴趣的文章
控制台程序秒变Windows服务(Topshelf)
查看>>
字节流与字符流的区别详解
查看>>
20141026--娱乐-箱子
查看>>
自定义分页
查看>>
Oracle事务
查看>>
任意输入10个int类型数据,把这10个数据首先按照排序输出,挑出这些数据里面的素数...
查看>>
String类中的equals方法总结(转载)
查看>>
图片问题
查看>>
bash使用规则
查看>>
AVL数
查看>>
第二章练习
查看>>
ajax2.0
查看>>
C#时间截
查看>>
C语言程序设计II—第九周教学
查看>>
C# 获取系统时间及时间格式转换
查看>>
WCF、WebAPI、WCFREST、WebService之间的区别
查看>>
2018-2019-2-20175332-实验四《Android程序设计》实验报告
查看>>
全栈12期的崛起之捡点儿有用的说说
查看>>
基础类型
查看>>
属性动画
查看>>