C#面向对象-文件类操作

本文介绍了C#中Path类用于路径操作的方法,如获取文件名、扩展名和目录,以及File类进行文件创建、删除、复制、移动和读写操作。同时涵盖了编码概念和不同编码方式,以及如何使用FileStream、StreamReader和StreamWriter进行高级文件操作。
摘要由CSDN通过智能技术生成

文件类

 1.path类 

  • 概念: 

1.Path类主要用于对路径字符串进行操作,并且提供了对路径操作的常用方法 

2.它是静态类,不能创建对象

  • path所提供的方法:  
path.GetFileName()从路径字符串中得到文件名(带扩展名)
path.GetFileNameWithoutExtension()从路径字符串中得到文件名(不带扩展名)
path.GetExtension()从文件路径字符串中得到文件的扩展名
path.GetDirectoryName()得到文件所在的文件夹的名称
path.GetFullPath()从文件字符串中得到包括文件名和扩展名的全路径名
path.Combine(文件名1,文件名2)合并两个文件路径字符串
//GetFileName()方法
string Str1=@"C:\Users\Administrator\Desktop\测试文件.txt";
Console.WriteLine(Path.GetFileName(Str1));//输出:测试文件.txt
Console.ReadKey();

//GetFileNameWithoutExtension()方法
string Str1=@"C:\Users\Administrator\Desktop\测试文件.txt";
Console.WriteLine(Path.GetFileNameWithoutExtension(Str1));//输出:测试文件
Console.ReadKey();

//GetExtension()方法
string Str1=@"C:\Users\Administrator\Desktop\测试文件.txt";
Console.WriteLine(Path.GetExtension(Str1));//输出:.txt
Console.ReadKey();

//GetDirectoryName()方法
string Str1=@"C:\Users\Administrator\Desktop\测试文件.txt";
Console.WriteLine(Path.GetDirectoryName(Str1));//输出:C:\Users\Administrator\Desktop
Console.ReadKey();

//GetFullPath()方法
string Str1=@"C:\Users\Administrator\Desktop\测试文件.txt";
Console.WriteLine(Path.GetFullPath(Str1));//输出:C:\Users\Administrator\Desktop\测试文件.txt
Console.ReadKey();

//Combine()方法
string Str1=@"C:\Users\Administrator\";
string Str2=@"Desktop\测试文件.txt";
Console.WriteLine(Path.Combine(Str1,Str2));//输出:C:\Users\Administrator\Desktop\测试文件.txt
Console.ReadKey();

2.编码 

文本文件有着不同的存储方式,将字符串以什么样的形式保存为二进制,这个就是编码,编码的方式有ASCII,UTF-8,Unicode,gbk等 

3.File类  

  • 概念: 

1.C#中对文件的操作

2.在C#中关于文件的操作都在命名空间System.IO下 

3.File类是一个静态类

using System.IO;
  • File类的基本操作:  
File.Create(@"文件路径")在指定路径中创建或覆盖一个文件,如果指定路径下已经有此文件,那么原有的会被覆盖
File.Delete(@"文件路径")根据指定路径删除一个文件,此删除是彻底删除,回收站也没有。
File.Copy("被复制文件路径","新文件路径")根据指定路径复制一个文件
File.Move("被剪切文件路径","新文件路径")将指定的文件移到新位置(等于剪切一个文件到新的地方)
File.ReadAllBytes(@"文件路径")读取一个文件内容,返回的是这个文件内容的字节数组.
File.ReadAllLines(@"文件路径",指定的编码格式)读取一个文件的所有行,返回包含文件所有行的字符串数组
File.ReadAllText(@"文件路径",指定的编码格式)读取一个文件的所有行,返回包含文件所有行的字符串
File.WriteAllBytes(@"文件路径",指定的字节数组)在指定路径中创建一个文件,在其中写入指定的字节数组,如果此文件存在,那么原有的会被覆盖
File.WriteAllLines(@"文件路径",指定的字符串数组)在指定路径中创建一个文件,在其中写入指定的字符串数组
File.WriteAllText(@"文件路径",指定的字符串)在指定路径中创建一个文件,在其中写入指定的字符串

//File.Create()的方法
static void Main(string[] args)
{
    File.Create(@"C:\Users\Administrator\Desktop\1.txt");
}

//File.Delete()的方法

static void Main(string[] args)
{
    File.Delete(@"C:\Users\Administrator\Desktop\1.txt");
}

//File.Copy()的用法
static void Main(string[] args)
{
    File.Copy(@"C:\Users\Administrator\Desktop\debug.log",
    @"C:\Users\Administrator\Desktop\newDebug.log");
}

//File.Move()的用法
static void Main(string[] args)
{
            
    File.Move(@"C:\Users\Administrator\Desktop\debug.log",
    @"C:\Users\Administrator\Desktop\newDebug.log");
}

//File.ReadAllBytes()的用法
static void Main(string[] args)
{
    // 以二进制字节数组的形式给读出来
    byte[] buffer = File.ReadAllBytes(@"C:\Users\Administrator\Desktop\1.txt");
    // 使用下边方法把二进制字节数组转为字符串,我们才能看到真正的内容
    // 下边Encoding后边是一个编码格式,默认使用UTF8即可
    string str = Encoding.UTF8.GetString(buffer);
    Console.WriteLine(str);
    Console.ReadKey();
}

//File.ReadAllLines()的用法
static void Main(string[] args)
{
    string[] str = File.ReadAllLines(@"C:\Users\Administrator\Desktop\1.txt", 
    Encoding.UTF8);
    for (int i = 0; i < str.Length; i++)
    {
        Console.WriteLine(str[i]);
    }
    Console.ReadKey();
}

//File.ReadAllText()的用法
static void Main(string[] args)
{
    string str = File.ReadAllText(@"C:\Users\Administrator\Desktop\1.txt", 
    Encoding.UTF8);
    Console.WriteLine(str);
    Console.ReadKey();
}

//File.WriteAllBytes()的用法
static void Main(string[] args)
{
    string str = "今天天气很好";
    //将字符串转化为字符数组
    byte[] buffer = Encoding.UTF8.GetBytes(str);
    File.WriteAllBytes(@"C:\Users\Administrator\Desktop\2.txt",buffer);
}

//File.WriteAllLines()的用法
static void Main(string[] args)
{
    File.WriteAllLines(@"C:\Users\Administrator\Desktop\2.txt",new string[]                 
    {"aoe","ade"});
}

//File.WriteAllText()的用法
static void Main(string[] args)
{
    File.WriteAllLines(@"C:\Users\Administrator\Desktop\2.txt","今天天气好好哎!");
}

注:File类只能对小文件有作用,对于大文件需要用到文件流 

4.文件流 

  • 概念: 

与file类相比较,文件流对系统的负荷比较轻松,就好比一缸水,文件流是用盆一盆一盆的将缸子里的水移出,而file类是将缸子抬起来将水倒出。文件流主要用到FileStream、StreamRead和StreamWrite这两类操作。 

4.1.FileStream

  • 概念: 

1.FileStream是非静态类,需要创建对象使用,而且需要手动输入命名空间。

2.FileStream是对字节进行操作,这个使用范围更广,不仅可以对文本文件操作,还可以对多媒体文件进行操作。

3.对文件操作完成后,需要我们手动来释放文件流操作所占的资源,也可以使用using()来释放资源

  • 操作: 
命名空间:using System.IO;

//创建对象:
FileStream 名字 = new FileStream(@"路径",打开文件的方式,对文件的操作);

//读操作
名字.Read(字节数组,从哪开始,一次性所读取字节数组的最大长度)
//写操作
名字.Write(字节数组,从哪开始,一次性所读取字节数组的最大长度)

//关闭流
名字.Close();

//释放流所占用的空间
名字.Dispose();
//读取文件
FileStream fr = new FileStream(@"C:\Users\hp\Desktop\new.txt", FileMode.OpenOrCreate,FileAccess.Read);
//创建字节数组
byte[] buffer = new byte[1024 * 1024 * 2];
//当读取的字节数小于数组的最大长度,返回本次实际读取到的有效字节数
int r = fr.Read(buffer,0,buffer.length);
//将字节数组中每一个元素按照指定的编码格式解码成字符串
string s = Encoding.Default.GetString(buffer,0,r);
//关闭流
fr.Close();
//释放流所占的资源
fr.Dispose();

//写入文件
using(FileStream fw = new FileStream(@"C:\Users\hp\Desktop\new.txt", FileMode.OpenOrCreate,FileAccess.Write))
{
    string str = "今天天气好好哎";
    //将字符串转换成字节数组
    byte[] buffer = Encoding.Default.GetBytes(str);
    fw.Write(buffer,0,buffer.length);
}
Console.WriteLine("OK");
Console.ReadKey();

//多媒体文件的复制
string source = @"C:\Users\hp\Desktop\1.wmv";
string target = @"C:\Users\hp\Desktop\new.txt";
//创建一个读取的流
using(FileStream fr = new FileStream(source, FileMode.Open,FileAccess.Read))
{
    //创建一个写入的流
    using(FileStream fw = new FileStream(target, FileMode.OpenOrCreate,FileAccess.Write))
    {
        byte[] buffer = new byte[1024 * 1024 * 5];
        //多媒体文件内存比较大,我们可以用循环去读取
        while(true)
        {
            //返回本次实际读取到的有效字节数
            int r = fr.Read(buffer,0,buffer.length);
            //如果最后返回一个0,也就意味着什么也没有读到
            if(r == 0)
            {
                break;
            }
            fw.Write(buffer,0,r);
        }
    }
}

4.2 StreamReader和StreamWriter

  • 概念:

 StreamReader和StreamWriter是非静态类,需要创建对象使用,而且需要手动输入命名空间。

StreamReader(文件地址,编码格式)读取文件
StreamWriter(文件地址,是否追加,编码格式)写入文件
//StreamReader的用法
using (StreamReader sr = new StreamReader("StreamWriter.txt", Encoding.Default))
{
    while(!sr.EndOfStream)//判断是否到文件的结尾
    {
        Console.WriteLine(sr.ReadLine());
        //ReadLine()只能读取一行字符串,要想把文件全部读取,需要借用循环
    }
}

//StreamWriter的用法
using (StreamReader sw = new StreamWriter("StreamWriter.txt"))
{
    sw.Write("今天天气好晴朗!");
}

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值