首页 > 编程语言 >C# 常用文件类概述

C# 常用文件类概述

时间:2024-08-09 21:52:08浏览次数:9  
标签:文件 常用 Console File C# 概述 WriteLine Path string

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

相关文章

  • AGC001 题解
    目录A-BBQEasyB-MysteriousLightC-ShortenDiameterA-BBQEasy先将\(2N\)个数排序,从大到小考虑,最大的数一定不会产生贡献,次大的数可以和最大的数捆绑在一起,并产生贡献,以此类推,这样的贪心正确性还是较为显然的。#include<bits/stdc++.h>#definelllonglongusin......
  • AC 自动机学习笔记
    1.KMP自动机1.1内容KMP自动机本质上就是单串的AC自动机。我们定义转移函数为:\[\delta(i,c)=\begin{cases}\delta(\pi_i,c)&s_{i+1}\not=c\\i+1&s_{i+1}=c\end{cases}\]其实也就是模拟了KMP的整个过程。1.2应用自动机上跑dp是最常见的应用,一般会有一......
  • C语言(五)-结构体
    C语言(五)-结构体1.结构体定义在编程的时候需要将不同的类型的数据组合成为一个整体,以便于引用。例如,一名学生有学号、姓名、性别、年龄、地址等属性,如果针对学生的学号、姓名、年龄等都单独定义一个变量,那么在有多名学生时,变量就难以分清。为此,C语言提供结构体来管理不同类......
  • Collection中的成员方法2 day12
    packagecom.shujia.day12;importjava.util.ArrayList;importjava.util.Collection;/*Collection中的成员方法:booleanaddAll(Collectionc)将直接添加另一个集合中所有单元素booleanremoveAll(Collectionc)从一个集合中移除另一个......
  • [lnsyoj2246/luoguCF979D]Kuro and GCD and XOR and SUM
    题意给定集合\(S\),初始为空,进行\(q\)次修改或查询操作:修改操作将\(x\)加入集合;查询操作给定\(x,s,k\),要求找到满足\[\max_{u\inS,u+x\les,k|\gcd(u,x)}\{u\oplusx\}\]的最小的\(u\)。sol集合、异或、可查可改,可以自然地想到0/1-Trie。我们假设\(k=1\),此时不需......
  • Datawhale AI夏令营第四期 魔搭-AIGC方向 task01笔记
    DatawhaleAI夏令营第四期魔搭-AIGC方向task01笔记提示词提示词很重要,一般写法:主体描述,细节描述,修饰词,艺术风格,艺术家举个例子【promts】Beautifulandcutegirl,smiling,16yearsold,denimjacket,gradientbackground,softcolors,softlighting,cinematicedge......
  • CF1999F.Expected Median 题解
    一.前言这是一道很有趣的数学题目,用到了逆元和组合数学,非常适合新手练手。二.题目大意:给出一个长度为\(n\)的\(01\)数组。找出所有长度为\(k\)的子序列的中位数,求出其和。妥妥的数学题~三.分析首先考虑对答案的贡献。很明显,只有\(1\)作为中位数时才会做出贡献,于是......
  • Python教程(十三):常用内置模块详解
    目录专栏列表1.`os`模块2.`sys`模块3.`re`模块4.`json`模块5.`datetime`模块6.`math`模块7.`random`模块8.`collections`模块9.`itertools`模块10.`threading`模块总结专栏列表Python教程(十):面向对象编程(OOP)Python教程(十一):单元测试与异常捕获Py......
  • Collection(接口)及对单个元素进行操作day12
    packagecom.shujia.day12;importjava.util.ArrayList;importjava.util.Collection;/*Collection:合层次结构中的根界面。集合表示一组被称为其元素的对象。一些集合允许重复元素,而其他集合不允许。】、有些被命令和其他无序。JDK不提供此接口的任何直接实现:它......
  • *算法训练(leetcode)第四十七天 | 并查集理论基础、107. 寻找存在的路径
    刷题记录*并查集理论基础107.寻找存在的路径*并查集理论基础讲解107.寻找存在的路径题目地址直接套模板。结点编号从1开始,因此定义father数组时需要n+1个空间,否则会越界。时间复杂度:O(......