初步认识C#的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; }

下列是 pathD:\TestDir\Assets\TestFile.txt 的例子,并用表格表示:

FullNameD:\TestDir\Assets\TestFile.txt
NameTestFile.txt
DirectoryNameD:\TestDir\Assets
Existsfalse (如果文件不存在) true (如果文件存在)

常用方法

常用方法的如下:

// 复制文件到 destFileName ,并不覆盖同名文件
public FileInfo CopyTo(string destFileName);
// 复制文件到 destFileName ,并由 overwrite 决定是否覆盖同名文件
public FileInfo CopyTo(string destFileName, bool overwrite)// 创建文件
public FileStream Create();

// 删除文件
public override void Delete();

还是在 pathD:\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,
}
  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值