在C#中,Path
类和 File
类都是用于处理文件和路径的实用工具类。
Path
类提供了一组静态方法来操作文件路径。它主要用于合并、拆分、规范化和操作文件路径的字符串。以下是一些常用的 Path
类方法示例:
string path1 = @"C:\folder1\file.txt";
string path2 = @"C:\folder2\file.txt";
// 合并路径
string combinedPath = Path.Combine(path1, "subfolder", "file.txt");
Console.WriteLine(combinedPath);
// 获取文件名
string fileName = Path.GetFileName(combinedPath);
Console.WriteLine(fileName);
// 获取文件名(无扩展名)
string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(combinedPath);
Console.WriteLine(fileNameWithoutExtension);
// 获取文件扩展名
string extension = Path.GetExtension(combinedPath);
Console.WriteLine(extension);
// 获取文件所在目录
string directory = Path.GetDirectoryName(combinedPath);
Console.WriteLine(directory);
// 检查路径是否为绝对路径
bool isAbsolutePath1 = Path.IsPathRooted(path1);
bool isAbsolutePath2 = Path.IsPathRooted("relative/path.txt");
Console.WriteLine(isAbsolutePath1); // true
Console.WriteLine(isAbsolutePath2); // false
File
类提供了一组静态方法用于操作文件。它可以用于创建、复制、移动、删除以及读取和写入文件。以下是一些常用的 File
类方法示例:
string filePath = @"C:\folder\file.txt";
// 创建一个新文件
File.Create(filePath);
// 复制文件
string destinationPath = @"C:\folder\newfile.txt";
File.Copy(filePath, destinationPath);
// 移动文件
string newPath = @"C:\newfolder\file.txt";
File.Move(filePath, newPath);
// 删除文件
File.Delete(filePath);
// 检查文件是否存在
bool fileExists = File.Exists(filePath);
Console.WriteLine(fileExists);
// 读取文本文件并打印内容
string content = File.ReadAllText(newPath);
Console.WriteLine(content);
// 写入文本文件
string newContent = "Hello, World!";
File.WriteAllText(newPath, newContent);
FileStream类
FileStream
类是 C# 中用于操作文件的一个关键类之一。它提供了对文件进行读取和写入操作的能力,并且可以在文件中进行寻址和定位。FileStream
类是 Stream
类的一个派生类,因此它继承了 Stream
类中定义的许多方法和属性。
下面是 FileStream
类的一些重要属性和方法:
构造函数
-
FileStream(string path, FileMode mode)
:使用指定的路径和文件模式创建一个新的FileStream
对象。文件模式可以是FileMode
枚举中的一个值,如FileMode.Create
、FileMode.Open
等。 -
FileStream(string path, FileMode mode, FileAccess access)
:创建一个新的FileStream
对象,指定路径、文件模式和访问权限。 -
FileStream(string path, FileMode mode, FileAccess access, FileShare share)
:创建一个新的FileStream
对象,指定路径、文件模式、访问权限和共享模式。
属性
-
CanRead
:获取一个值,该值指示当前流是否支持读取操作。 -
CanWrite
:获取一个值,该值指示当前流是否支持写入操作。 -
Length
:获取流的长度(以字节为单位),即文件的大小。 -
Position
:获取或设置流中的当前位置。
方法
-
Read(byte[] buffer, int offset, int count)
:从流中读取一定数量的字节,并将其存储到缓冲区中。 -
Write(byte[] buffer, int offset, int count)
:将指定数量的字节从缓冲区写入流。 -
Seek(long offset, SeekOrigin origin)
:将流的位置设置为指定的偏移量。 -
Flush()
:清空流的缓冲区,并将缓冲区的数据写入文件。 -
Close()
:关闭当前流并释放与之关联的所有资源。using System; using System.IO; class Program { static void Main() { // 创建一个新的文件流,打开或创建一个名为 "example.txt" 的文件 using (FileStream fileStream = new FileStream("example.txt", FileMode.OpenOrCreate, FileAccess.ReadWrite)) { // 将字符串写入文件 string text = "Hello, FileStream!"; byte[] buffer = System.Text.Encoding.UTF8.GetBytes(text); fileStream.Write(buffer, 0, buffer.Length); // 将文件流的位置设置为文件开头 fileStream.Seek(0, SeekOrigin.Begin); // 从文件中读取数据并显示 byte[] readBuffer = new byte[buffer.Length]; fileStream.Read(readBuffer, 0, readBuffer.Length); string readText = System.Text.Encoding.UTF8.GetString(readBuffer); Console.WriteLine("Read from file: " + readText); } } }
//使用文件流来实现多媒体文件的复制
static void Main(string[] args)
{
string source = @"D:\录屏\bandicam 2023-02-26 16-56-14-603.avi";
string target = @"C:\Users\LA-ZC\Videos\Captures\new.avi";
CopyFile(source, target);
Console.WriteLine("复制成功!");
Console.ReadKey();
}
public static void CopyFile(string source,string target)
{
//创建一个负责读取的流
using(FileStream fsRead = new FileStream(source, FileMode.Open, FileAccess.Read))
{
//创建一个辅助写入的流
using (FileStream fsWrite = new FileStream(target,FileMode.OpenOrCreate, FileAccess.Write))
{
byte[] buffer = new byte[1024 * 1024 * 5];
//因为文件可能会比较大所以在读取的时候应该通过一个循环去读取
while(true)
{
//返回本次读取实际读到的字节数
int r = fsRead.Read(buffer, 0, buffer.Length);
//如果返回一个0,也就意味着什么都没有读取到,读取完了
if(r == 0)
{
break;
}
fsWrite.Write(buffer, 0, r);
}
}
}
}
/使用StreamReader来读取一个文本文件
//using(StreamReader sr = new StreamReader(@"C:\Users\LA-ZC\Desktop\实例2.sql",Encoding.Default))
//{
// while (!sr.EndOfStream)
// {
// Console.WriteLine(sr.ReadLine());
// }
//}
//使用StreamWriter来写入一个文本文件
using(StreamWriter sw = new StreamWriter(@"C:\Users\LA-ZC\Desktop\newnew.txt",true))
{
sw.Write("今天天气还可以");
}
Console.WriteLine("写入成功");
Console.ReadKey();