C# 常用文件类概述

1.常用文件类概述

文件、目录(文件夹)、路径输入及输出常用的类有: File,FileInfo,Directory, DirectoryInfo,

Path,DriveInfo。(更多的请查看官方文档)

1.文件相关类:File类,FileInfo类
2.路径类:Path类
3.盘符类:DriveInfo类

File和FileInfo的区别:

File类和FileInfo类都是提供用于创建、复制、删除、移动和打开单一文件的方法,并协助创建 FileStream 对象。
File类是静态类。FileInfo类是密封类。FileInfo类和File类的API相似度高,使用比File类灵活。

Directory和Directoryinfo的区别:

Directory类和DirectoryInfo类都是提供对目录(文件夹)进行创建、移动和枚举(循环、遍历、跌代)。
Directory类是静态类。DirectoryInfo类是密封类。DirectoryInfo类和Directory类的API相似度高,使用比Directory类灵活。

DriveInfo类提供对有关驱动器(盘符)的信息的访问。

Path类提供对文件路径的相关操作。

(更多的请查看官方文档)

规律:以Info结尾的是非静态的类,可以实例化。

提醒:静态类和密封类不能被继承。

2.类的API

1.File类的API

创建File.Create()
// 路径
string path = @"C:\Users\dongshuhua\Desktop\C#软件开发\12\输入输出\1.文件操作\";
// 文件名
string fileName1 = "b.txt";
// 文件的完整路径
string fullPath = Path.Combine(path, fileName1);
//File
//创建文件
FileStream fileStream = File.Create(fullPath);
重命名

File.Exists()判断文件是否存在
File.Delete()删除文件
File.Move()移动文件

//重命名文件
// 源文件,即重命名前的文件
string fileName = @"C:\Users\dongshuhua\Desktop\C#软件开发\12\输入输出\1.文件操作\b.txt";
// 目标文件,即重命名后的文件
string newFileName = @"C:\Users\dongshuhua\Desktop\C#软件开发\12\输入输出\1.文件操作\bb.txt";
// 目标文件存在时,先删除
if (File.Exists(newFileName))
{
    // 确保重命名后的文件不存在。
    File.Delete(newFileName);
}
// 再通过移动实现重命名
File.Move(fileName, newFileName);
复制File.Copy()
// 源文件,即复制前的文件
string sourceFileName = @"C:\Users\dongshuhua\Desktop\C#软件开发\12\输入输出\1.文件操作\a.txt";
// 目标文件,即复制后的文件
string newFileName1 = @"C:\Users\dongshuhua\Desktop\C#软件开发\12\输入输出\1.文件操作\a1.txt";
// Exists()判断文件是否存在,复制文件时,不允许覆盖同名文件,即源文件存在,目标文件不存在。
if (File.Exists(sourceFileName) && !File.Exists(newFileName1))
{
    // 复制文件时,不允许覆盖同名文件
    File.Copy(sourceFileName, newFileName1);
}

 创建并写入文件

string filename = @"C:\Users\dongshuhua\Desktop\C#软件开发\12\输入输出\1.文件操作\a2.txt";
File.WriteAllText(filename, "你好!abc123"); // 创建文件,并写入内容
File.AppendAllText(filename, "hello world"); // 追加内容,追加和写入不太一样,写入会替换原来的内容。
// AppendText()也会追加内容,需要引用流来使用。
using (var sw = File.AppendText(filename))
    {
        sw.WriteLine("HELLO WORLD1");
        sw.WriteLine("HELLO WORLD2");
    };
大部分API:

追加文本:AppendText(),AppendAllLines(),AppendAllText()

复制文件:Copy()

创建文件:Create(),CreateText()

删除文件:Delete()

移动文件:Move()

打开文件:Open(),OpenRead(),OpenText(),OpenWrite()

替换文件:Replace()

读取文件:ReadAllBytes(),ReadAllLines(),ReadAllText(),ReadLines()

写入文件:WriteAllBytes(),WriteAllLines(),WriteAllText()

判断文件是否存在:Exists()

加密及解密:Encrypt(),Decrypt()

2.FileInfo类的API

创建文件:Create(),AppendText()

复制文件:CopyTo(String) //禁止覆盖现有文件

复制文件:CopyTo(String1,String2) //允许覆盖现有文件

删除文件:Delete()

加密及解密:Encrypt(),Decrypt()

打开文件:Open(),OpenRead(),OpenText(),OpenWrite()

string path = Path.GetTempFileName();
var fi1 = new FileInfo(path);
// 创建要写入的文件。
using (StreamWriter sw = fi1.CreateText())
{
    sw.WriteLine("Hello");
    sw.WriteLine("And");
    sw.WriteLine("Welcome");
}
// 打开要读取的文件。
using (StreamReader sr = fi1.OpenText())
{
    var s = "";
    while ((s = sr.ReadLine()) != null)
    {
        Console.WriteLine(s);
    }
}
try
{
    string path2 = Path.GetTempFileName();
    var fi2 = new FileInfo(path2);
    // 确保目标不存在。
    fi2.Delete();
    // 复制文件
    fi1.CopyTo(path2);
    Console.WriteLine($"{path}被复制到{path2}.");
    // 删除新创建的文件
    fi2.Delete();
    Console.WriteLine($"{path2}已成功删除");
}
catch (Exception e)
{
    Console.WriteLine($"进程失败{e.ToString()}");
}

更多的API请查看官方文档

3.路径类:Path类

对包含文件或目录路径信息的 String 实例执行操作

部分方法:

// 目录===文件夹,路径
// DirectorySeparatorChar  目录分割符有两种:/  \,其中\默认的,
Console.WriteLine($"Path.DirectorySeparatorChar: '{Path.DirectorySeparatorChar}'");

// Alternate可选,可切换  分割符/
Console.WriteLine($"Path.AltDirectorySeparatorChar: '{Path.AltDirectorySeparatorChar}'");

// 多个路径之间分割符,是英文的分号;
Console.WriteLine($"Path.PathSeparator: '{Path.PathSeparator}'");

// 规律:方法带s结尾基本上集合    Invalid非法字符
var invalidChars = Path.GetInvalidPathChars();
string str = string.Empty;
foreach (char c in invalidChars)
{
    str += c.ToString();
}
Console.WriteLine(str);

// Volume卷标,盘符,分割符英文:
Console.WriteLine($"Path.VolumeSeparatorChar: '{Path.VolumeSeparatorChar}'");

// 注意:最后一个英文点后面的才是后缀名(扩展名)
string goodFileName = @"C:\mydir\myfile.com.extension";
string result = Path.ChangeExtension(goodFileName, ".old");
Console.WriteLine("ChangeExtension({0}, '.old') returns '{1}'",
    goodFileName, result);

// 拿扩展名,注意:取扩展名时,包含英文点
Console.WriteLine(Path.GetExtension(goodFileName));  // .extension

string[] pathArr = goodFileName.Split(new char[] { '.' });
string ext = pathArr[pathArr.Length - 1];
Console.WriteLine(ext);// 不带英文.

// 路径拼接,合并   Combine合并
// d:\archives\2001\media\images\a.jpg
string[] paths = { @"d:\archives", "2001", "media", "images", "a.jpg" };
string fullPath = Path.Combine(paths);
Console.WriteLine(fullPath);

// GetDirectoryName获取路径的目录部分
Console.WriteLine(Path.GetDirectoryName(goodFileName));
Console.WriteLine(Path.GetDirectoryName(fullPath));
// 取路径中的文件部分
Console.WriteLine(Path.GetFileName(fullPath));
Console.WriteLine(Path.GetFileName(@"D:\abc"));
Console.WriteLine(Path.GetFileNameWithoutExtension(fullPath)); // a

//返回指定路径字符串的绝对路径。
Console.WriteLine(Path.GetFullPath(fullPath));
//获取包含不允许在文件名中使用的字符的数组
char[] chars = Path.GetInvalidFileNameChars();
Console.WriteLine(string.Join("-", chars));
//获取指定路径的根目录信息。
Console.WriteLine(Path.GetPathRoot(fullPath));
//返回随机文件夹名或文件名
Console.WriteLine(Path.GetRandomFileName());
Console.WriteLine(Path.GetRandomFileName());

// 随机生成一个txt文件,要求:还上时间戳
string randomString = Path.GetRandomFileName();
string fileName = randomString.Split(new char[] { '.' })[0];
string tick = DateTime.Now.Ticks.ToString();
string fullFileName = $"{tick}-{fileName}.txt";
Console.WriteLine(fullFileName);
//更改路径字符串的扩展名。
Console.WriteLine($"{tick}-{Path.ChangeExtension(randomString, ".txt")}");

//返回临时文件的完整路径
// C:\Users\XXXX\AppData\Local\Temp
Console.WriteLine(Path.GetTempFileName());
Console.WriteLine(Path.GetTempFileName());

4.盘符类:DriveInfo类

提供对有关驱动器的信息的访问。

 // 获取所有逻辑驱动器的信息   Drive驱动
 DriveInfo[] drives = DriveInfo.GetDrives();
 foreach (DriveInfo drive in drives)
 {
     Console.WriteLine($"Drive: {drive.Name}");  // 驱动名称
     Console.WriteLine($"  Volume Label: {drive.VolumeLabel}");  // 卷标
     Console.WriteLine($"  Type: {drive.DriveType}");  // 驱动类型
     Console.WriteLine($"  Available Space: {drive.AvailableFreeSpace / 1024 / 1024 / 1024} bytes");// 可用空间
     Console.WriteLine($"  Total Size: {drive.TotalSize / 1024 / 1024 / 1024} bytes");  // 总空间
     Console.WriteLine($"  IsReady: {drive.IsReady}");// 磁盘是否准备好
     Console.WriteLine($"  Root Directory: {drive.RootDirectory.Name}");//盘符
 }
 DriveInfo info = new DriveInfo("D");
 Console.WriteLine(info.AvailableFreeSpace / 1024 / 1024 / 1024D);//返回驱动器上的可用空闲空间量(以字节为单位)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值