IO操作
一. Directory(文件夹)相关操作
1. Directory 类
详细信息见 Directory C# 官方文档;
简单的介绍一下 Directory
类中一些常用的静态方法:
// 在指定路径(path)中创建 [所有目录和子目录]
// 如果路径存在就不创建,直接返回已有的路径文件夹信息
public static DirectoryInfo CreateDirectory(string path);
// 如果 path 下的文件夹存在,并且是空文件夹,就删除
// 如果文件夹不是空的,就会报错
public static void Delete(string path);
// 删除 path 下的文件夹,由 recursive 决定是否包括所有子目录和文件
public static void Delete(string path, bool recursive);
// 判断 path 下的文件夹是否存在
public static bool Exists(string path);
2. DirectoryInfo 类
详细信息见 Directory C# 官方文档;
// 创建文件夹,如果文件夹存在,则不进行任何操作
public void Create();
// 删除文件夹
// 和 Directory 一样
public override void Delete();
public void Delete(bool recursive)
二. File(文件)相关操作
1. File 类
使用到的相关类:
类名 |
|
---|---|
File | 提供用于创建、复制、删除、移动和打开单一文件的静态方法,并协助创建 FileStream 对象 |
FileStream | 提供对 path(路径) 中指定的文件的读/写访问 |
File
是一个静态类,提供各种操作文件相关的方法,常用的如下:
// 在指定 path 创建文件,如果有可写的同名文件就覆盖
public static FileStream Create(string path);
// 删除 path 位置的文件
// 要确保删除文件存在,否则会报错
public static void Delete(string path);
// 判断 path 位置的文件是否存在
// 如果路径不存在会返回 false
public static bool Exists(string path);
// 将文件从 sourceFileName 复制到 destFileName,不允许覆盖同名文件
// sourceFileName 是要复制的文件
// destFileName 是目标文件的名称,不能是一个目录或现有文件。
public static void Copy(string sourceFileName, string destFileName);
// 同上,不过 overwrite 决定是否覆盖同名文件
public static void Copy(string sourceFileName, string destFileName, bool overwrite);
// 移动文件
public static void Move(string sourceFileName, string destFileName)
2. FileInfo 类
详细信息见 FileInfo C# 官方文档;
常用属性
FileInfo
类是不能被继承的非静态类,提供各种操作文件相关的方法。
属性介绍:
// 得到文件的文件夹信息
public DirectoryInfo Directory { get; }
// 得到文件夹的文件夹名
public string DirectoryName { get; }
// 文件名
public string Name { get; }
// 文件的整个路径
public string FullName { get; }
下列是 path
为 D:\TestDir\Assets\TestFile.txt
的例子,并用表格表示:
FullName | D:\TestDir\Assets\TestFile.txt |
---|---|
Name | TestFile.txt |
DirectoryName | D:\TestDir\Assets |
Exists | false (如果文件不存在) true (如果文件存在) |
常用方法
常用方法的如下:
// 复制文件到 destFileName ,并不覆盖同名文件
public FileInfo CopyTo(string destFileName);
// 复制文件到 destFileName ,并由 overwrite 决定是否覆盖同名文件
public FileInfo CopyTo(string destFileName, bool overwrite);
// 创建文件
public FileStream Create();
// 删除文件
public override void Delete();
还是在 path
为 D:\TestDir\Assets\TestFile.txt
下进行测试:
方法 |
|
---|---|
Create | 如果不存在路径文件夹,则直接报错。如果存在 D:\TestDir\Assets 路径,则会在该路径下创建名为 TestFile.txt 的文件。如果存在相同名称文件,则覆盖 |
Delete | 如果路径和文件存不存在,都不会报错 |
三. 实操
给定一个路径,创建该路径下的文件或文件夹:
要求:
- 如果路径不存在,则创建,否则不做任何事
- 如果路径带后缀名,则创建文件,否则创建文件夹
当然还可以有更多的选项
public static void CreateFileOrDirectory(string path, CreateType createType = CreateType.DoNothing)
{
if(path.Contains("."))
{
FileInfo fileInfo = new FileInfo(path);
CreateFile(fileInfo, createType);
}
else
{
Directory.CreateDirectory(path);
}
}
public static void CreateFile(FileInfo fileInfo, CreateType createType = CreateType.DoNothing)
{
if (fileInfo.Exists)
{
switch(createType)
{
case CreateType.Overrite:
{
fileInfo.Create().Close();
}
break;
case CreateType.NewName:
{
string directoryName = fileInfo.DirectoryName;
string fileName = fileInfo.Name;
string[] fileNameAndSuffix = fileName.Split('.');
string fileHead = fileNameAndSuffix[0];
string suffix = fileNameAndSuffix[1];
int i = 1;
string newFilePath;
do
{
string newFileName = $"{fileHead}_{i}.{suffix}";
newFilePath = $@"{directoryName}\{newFileName}";
i++;
} while (File.Exists(newFilePath));
File.Create(newFilePath).Close();
}
break;
case CreateType.DoNothing:
break;
}
}
else
{
Directory.CreateDirectory(fileInfo.DirectoryName);
// 创建完文件,记得关闭
fileInfo.Create().Close();
}
}
// 创建文件的方式
public enum CreateType
{
Overrite,
NewName,
DoNothing,
}