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);//返回驱动器上的可用空闲空间量(以字节为单位)
标签:文件,常用,Console,File,C#,概述,WriteLine,Path,string
From: https://blog.csdn.net/2302_77639120/article/details/140936034