C#高级 06 文件操作

一 前置知识

1.知识点

  • 通过FileInfo和Directory类来读取文件和文件夹属性
bash 复制代码
查看文件属性,创建文件,移动文件,重命名文件
判读路径是否存在,创建目录
  • 通过File读写文件
  • 使用流来读写文件
bash 复制代码
FileStream
StreamReader(读取流-读取数据)
StreamWriter(写入流-向别人传输)

2FileInfo 和 Directory的属性列表

CreationTime 创建文件或文件夹的时间

DirectoryName (用于FileInfo)包含文件夹的完整路径

Parent(用于DirectoryInfo)指定子目录的父目录

Exists 文件或文件夹是否存在

Extension 文件的扩展名,对于文件夹则返回空白

FullName 文件或文件夹的完整路径名

LastAccessTime 最后一次访问文件或文件夹的时间

LastWriteTime 最后一次修改文件或文件夹的时间

Name 文件或文件夹的名称

Root (仅用于DirectoryInfo)路径的根部分

Length (仅用于FileInfo)返回文件的大小(以字节为单位)

3.FileInfo和DirectoryInfo的方法列表

Create()创建给定名称的文件夹或者空文件,对于FileInfo,该方法会返回一个流对象,以便于写入文件。

Delete()删除文件或文件夹,对于文件夹有一个可以递归的Delete选项

MoveTo()移动或重命名文件或文件夹

CopyTo() (只用于FileInfo)复制文件,文件夹没办法复制,如果想复制完整的目录树,需要单独复制每一个文件和文件夹

GetDirectories() (只适用于DirectoryInfo)返回DirectoryInfo对象数组,该数组表述文件夹中包含的所有文件夹

GetFiles() (只适用于FileInfo)返回FileInfo对象数组,该数组表示文件夹中所有文件

GetFileSystemInfo() (只适用于DirectoryInfo) 返回FileInfo和DirectoryInfo对象,把文件夹中包含的所有对象表示为一个FileSystemInfo引用数组

二 实际操作

1.文件复制

csharp 复制代码
//(1)
FileInfo myFile = new FileInfo(@"D:\workSpace\VS2022\WPF\C#高级篇\15_文件操作\TextFile1.txt");
myFile.CopyTo(@"D:\workSpace\VS2022\WPF\C#高级篇\15_文件操作\TextFile2.txt");
//(2)
File.Copy(@"D:\workSpace\VS2022\WPF\C#高级篇\15_文件操作\TextFile1.txt", @"D:\workSpace\VS2022\WPF\C#高级篇\15_文件操作\TextFile3.txt");

2.文件夹创建

csharp 复制代码
DirectoryInfo myFolder = new DirectoryInfo(@"D:\workSpace\VS2022\WPF\C#高级篇\15_文件操作\create");
myFolder.Create();
Console.WriteLine(myFolder.FullName);
Console.ReadKey();

3.存在和创建时间

csharp 复制代码
FileInfo test = new FileInfo(@"d:\Temp\说明.txt");
Console.WriteLine(test.Exists);
Console.WriteLine(test.CreationTime);
//修改创建时间
test.CreationTime = new DateTime(2010, 1, 1, 7, 20, 0);
Console.WriteLine(test.CreationTime);
Console.ReadKey();

4.文件读写的使用,举例说明如何使用文件读写实现复制操作

csharp 复制代码
//读
byte[] bArray = File.ReadAllBytes(@"D:\workSpace\VS2022\WPF\C#高级篇\15_文件操作\TextFile1.txt");
Console.WriteLine(Encoding.Default.GetString(bArray));
Console.ReadKey();
//写
File.WriteAllText(@"D:\workSpace\VS2022\WPF\C#高级篇\15_文件操作\TextFile1.txt","www.testContent.com");
//设置文件打开方式、和访问方式
FileStream readFileStream = new FileStream(@"D:\workSpace\file.zip",FileMode.Open,FileAccess.Read);
FileStream writeFileStream = new FileStream(@"D:\workSpace\fileCopy.zip", FileMode.Create, FileAccess.Write);

//使用文件读写,实现文件复制
//方式一:流方式
int nextByte = -1;
while ((nextByte = readFileStream.ReadByte()) != -1)
{
    writeFileStream.WriteByte((byte)nextByte);
}
//方式二:buffer通道方式
int length = 1024;
byte[] buffer = new byte[length];
int count = -1;
while ((count = readFileStream.Read(buffer, 0, length)) != 0)
{
    writeFileStream.Write(buffer, 0, count);
}

5.创建读写流的几种方式

csharp 复制代码
//(1)创建读取流
string sourceFile = @"D:\workSpace\file.txt";
//方式一
StreamReader reader = new StreamReader(sourceFile);
//方式二
FileStream fs = new FileStream(sourceFile, FileMode.Open);
StreamReader reader = new StreamReader(fs);
//方式三
FileInfo myFile = new FileInfo(sourceFile);
myFile.OpenText();

//(2)根据读取流获取内容
//读取内容
//方式一
string line = reader.ReadLine();    //读取一行
Console.WriteLine(line);
//方式二
string line = null;
while ((line = reader.ReadLine()) != null)
{
    Console.WriteLine(line);
}

6.流的开闭顺序

先开的流后关闭,后开的流先关闭

相关推荐
酷爱码7 分钟前
PHP最新好看UI个人引导页网页源码
开发语言·ui·php
pp-周子晗(努力赶上课程进度版)9 分钟前
【Linux】线程ID、线程管理、与线程互斥
linux·运维·服务器·开发语言
佟格湾29 分钟前
聊透多线程编程-线程互斥与同步-11. C# lock关键字实现线程互斥
c#·多线程
奋进的小暄37 分钟前
贪心算法(20)(java)整数替换
开发语言·算法
虽千万人 吾往矣1 小时前
golang context源码
android·开发语言·golang
天堂的恶魔9461 小时前
C++项目 —— 基于多设计模式下的同步&异步日志系统(4)(双缓冲区异步任务处理器(AsyncLooper)设计)
开发语言·c++·设计模式
未来之窗软件服务1 小时前
数字人,磁盘不够No space left on device,修改python 执行环境-云GPU算力—未来之窗超算中心
linux·开发语言·python·数字人
爱的叹息2 小时前
【java实现+4种变体完整例子】排序算法中【桶排序】的详细解析,包含基础实现、常见变体的完整代码示例,以及各变体的对比表格
java·开发语言·排序算法
Zhuai-行淮2 小时前
施磊老师基于muduo网络库的集群聊天服务器(二)
开发语言·网络·c++
python_chai2 小时前
Python多进程并发编程:深入理解Lock与Semaphore的实战应用与避坑指南
开发语言·python·高并发·多进程··信号量