Directory类

Directory类 是一个静态类,常用的地方为创建目录和目录管理。

一下来看看它提供的操作。

1、CreateDirectory       根据指定路径创建目录。有重载,允许一次过创建多个目录。 
2、Delete             删除指定的目录。     有重载,指示目录有子目录的情况下,是否删除子目录。 true则连同子目录一起删除。flase则不删除目录,并返回                 一个异常。
3、Exists             确定给定路径是否引用磁盘上的现有目录。
4、GetAccessControl       已重载。 返回某个目录的 Windows 访问控制列表 (ACL)。
5、GetCreationTime         获取目录的创建日期和时间。
6、GetCreationTimeUtc    获取目录创建的日期和时间,其格式为协调通用时间 (UTC)。
7、GetCurrentDirectory     获取应用程序的当前工作目录。
8、GetDirectories        已重载。 获取指定目录中子目录的名称(字符串数组)。支持用*?通配符匹配符合名称的目录名。 注意,只返回目录名,不返回文件名
9、GetDirectoryRoot       返回指定路径的卷信息、根信息或两者同时返回。
10、GetFiles            已重载。 返回指定目录中的文件的名称(字符串数组)。注意只返回文件名,不返回目录   
11、GetFileSystemEntries    已重载。 返回指定目录中所有文件和子目录的名称(字符串数组)。目录名与文件名一起返回。 支持*?通配符检索。
12、GetLastAccessTime      返回上次访问指定文件或目录的日期和时间。
13、GetLastAccessTimeUtc   返回上次访问指定文件或目录的日期和时间,其格式为协调通用时间 (UTC)。
14、GetLastWriteTime      返回上次写入指定文件或目录的日期和时间。
15、GetLastWriteTimeUtc     返回上次写入指定文件或目录的日期和时间,其格式为协调通用时间 (UTC)。
16、GetLogicalDrives      检索此计算机上格式为“<驱动器号>:\”的逻辑驱动器的名称。
17、GetParent          检索指定路径的父目录,包括绝对路径和相对路径。
18、Move            将文件或目录及其内容移到新位置。
19、SetAccessControl     将 DirectorySecurity 对象描述的访问控制列表 (ACL) 项应用于指定的目录。
20、SetCreationTime      为指定的文件或目录设置创建日期和时间。
21、SetCreationTimeUtc     设置指定文件或目录的创建日期和时间,其格式为协调通用时间 (UTC)。
22、SetCurrentDirectory    将应用程序的当前工作目录设置为指定的目录。
23、SetLastAccessTime     设置上次访问指定文件或目录的日期和时间。
24、SetLastAccessTimeUtc  设置上次访问指定文件或目录的日期和时间,其格式为协调通用时间 (UTC)。
25、SetLastWriteTime     设置上次写入目录的日期和时间。
26、SetLastWriteTimeUtc    设置上次写入某个目录的日期和时间,其格式为协调通用时间 (UTC)。

Directory类案例

【文件夹操作 习题】

1、用程序在桌面用程序创建main一个文件夹
2、用程序在main文件里面创建一个subdirectory1文件夹
3、用程序在main文件夹里面创建10个子文件,文件名是随机的。
4、用程序在subdirectory1文件夹里面创建10个子文件,文件名是随机的。
5、获取main里面十个子文件夹名称,并且把它输出到控制台
6、判断main文件是否有子文件subdirectory2,如果没有就新建一个文件夹, 文件夹名称就叫subdirectory2
7、在main文件夹下面创建backUp的文件,然后把subdirectory 移动到backUp里面。
8、获取main文件夹文件名包含 5 的所有文件夹,并且将这些文件名输出到控制台,不包含子文件的里面的文件夹
9、获取main文件夹文件名包含 5 的所有文件夹,并且将这些文件名输出到控制台,包含子文件的里面的文件夹
10、查询main文件夹创建的时间,以及最后的访问日期。并且查询到信息输出到控制台
11、修改main最后的访问日期
12、查询main文件有多少个文件和文件夹(注意区分子目录)
13、查询main文件 的上一级文件夹是谁
14、查询main文件夹的跟目录
15、获取计算机上的所有的分区(比如C盘、D盘)
16、删除子文件backUp

答案:
using System.Text;

/*
* 文件的复制的功能在File类中,所以这边就不再操作了。
* 代码有点长,不过都是片段的,要耐心看哦
* */
//获取当前程序所在的目录,默认以这个目录为当前目录
Console.WriteLine(AppDomain.CurrentDomain.BaseDirectory);
//将当前目录设置为桌面
Directory.SetCurrentDirectory(Environment.GetFolderPath(Environment.SpecialFolder.Desktop));
string path = @"D:\程序开发\vs2022\自定义快捷键\LinNotifyFilter.snippet"; int i = 0;
int j = 0;
//在桌面新建 main文件夹
Console.WriteLine("1、在桌面新建 main文件夹");
DirectoryInfo main = new DirectoryInfo("main");
if (main.Exists)
{
Console.WriteLine("main文件已经存在,不再重复创建");
}
else
{
main.Create();
Console.WriteLine(" main创建成功".PadLeft(20)); } //在main文件夹下新建子文件subdirectory
Console.WriteLine("2、在main文件夹下新建子文件subdirectory");
DirectoryInfo subdirectory = new(Path.Combine(main.FullName, "subdirectory"));
if (subdirectory.Exists)
{
Console.WriteLine("subdirectory文件已经存在,不再重复创建");
}
else
{
subdirectory.Create();
Console.WriteLine(" subdirectory创建成功".PadLeft(20)); } //subdirectory文件夹下创建10个文件夹,文件名是随机的
Console.WriteLine("3、subdirectory文件夹下创建10个文件夹,文件名是随机的");
if (subdirectory.GetDirectories().Length < 20)
{
while (i < 10 && subdirectory.GetDirectories().Length < 20)
{
i++;
subdirectory.CreateSubdirectory("sub" + Path.GetRandomFileName()); }
}
else
{
Console.WriteLine("子文件已经有20个了,不再创建了");
}
//main文件夹 下创建10个文件夹,文件名是随机的
Console.WriteLine("4、main文件夹 下创建10个文件夹,文件名是随机的");
if (main.GetDirectories().Length < 20)
{
while (j < 10)
{
j++; main.CreateSubdirectory(Path.GetRandomFileName()); }
}
else
{
Console.WriteLine("子文件已经有20个了,不在创建了");
} //获取main里面子文件夹名称,并且把它输出到控制台
Console.WriteLine("5、获取main里面十个子文件夹名称,并且把它输出到控制台:");
DirectoryInfo[] directoryInfos = main.GetDirectories();
foreach (var item in directoryInfos)
{
// Console.WriteLine(item.Name);这是没有对齐的写法
Console.WriteLine(item.Name.PadLeft(20, ' '));//左对齐
} //判断main文件是否有子文件subdirectory2,如果没有就新建一个文件夹, 文件夹名称就叫subdirectory2
Console.WriteLine("6、获取指定目录下(包含子目录)的文件和子目录,返回类型为FileSystemInfo[],支持通配符查找");
if (main.GetDirectories("subdirectory2").Length == 0)
{
main.CreateSubdirectory("subdirectory2");
Console.WriteLine($" 创建成功");
}
else
{
Console.WriteLine(" subdirectory2 文件以及存在");
} Console.WriteLine("7、在main文件夹下面创建backUp的文件,然后把subdirectory 移动到backUp里面");
if (main.GetDirectories("backUp").Length == 0)
{
subdirectory.MoveTo(Path.Combine(subdirectory.Parent.FullName, "backUp"));
Console.WriteLine(" 移动成功");
}
else
{
Console.WriteLine(" 移动失败,backUp文件夹已经存在"); } //获取目录(不包含子目录)的子目录,返回类型为DirectoryInfo[],支持通配符查找;
Console.WriteLine("6、查找main文件夹下名字包含5的文件(不包含子文件夹)的文件,将文件夹的名称输出到控制台");
foreach (var item in main.EnumerateDirectories("*5*"))
{
Console.WriteLine(item.Name.PadLeft(20, ' '));
} //获取指定目录下(包含子目录)的文件和子目录,返回类型为FileSystemInfo[],支持通配符查找;
Console.WriteLine("8、获取main目录下(包含子目录)的子目录 名字包含5的文件夹名,将文件夹的名称输出到控制台");
foreach (var item in main.EnumerateDirectories("*5*", SearchOption.AllDirectories))
{
Console.WriteLine(item.Name.PadLeft(20, ' '));
} //查询
Console.WriteLine($"main文件夹的创建日期:{main.CreationTime}");
Console.WriteLine($"main文件夹的最后访问日期:{main.LastAccessTime}");
main.LastAccessTime = DateTime.Now.AddDays(1);//把最后的访问日期设置为明天
Console.WriteLine($"main文件夹的修改后的最后访问日期:{main.LastAccessTime}");
Console.WriteLine("mian文件之下一共有文件:{0}个,文件:{1}个",main.EnumerateDirectories().Count(),main.GetFiles().Length );
Console.WriteLine("上一级文件夹是:{0}",main.Parent.Name);
Console.WriteLine($"main的文件的跟目录:{main.Root}"); Console.WriteLine($"获取计算机上的所有的分区:");
foreach (var item in Directory.GetLogicalDrives())
{
Console.WriteLine(item); } Directory.Delete(Path.Combine(main.FullName, "subdirectory2"), true); //程序执行完成后恢复当前目录
Directory.SetCurrentDirectory(AppDomain.CurrentDomain.BaseDirectory);

using System.IO;
using System.Runtime.Loader; namespace IoTest; public class IoTest
{ static void Main()
{
//获取当前程序所在的目录,默认以这个目录为当前目录
Console.WriteLine(AppDomain.CurrentDomain.BaseDirectory); //更改当前目录,把桌面设置为当前目录,相对路径是基于当前目录的。
Directory.SetCurrentDirectory(Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory)); //因为已经把桌面设定为当前目录了。所以程序中就可以用相对路径。
string path ="IOTest";
string path1= Path.Combine(path, "temp1"); if (Directory.Exists(path))
{ //创建文件夹
DirectoryInfo directoryInfo=Directory.CreateDirectory(path);//如果文件夹不存在则创建文件,如果文件存在就不创建。最后都返回文件的信息
Console.WriteLine("判断新建的文件夹{0}是否存在:{1}",directoryInfo.Name, Directory.Exists(path));//判断新建的文件夹是否存在:True
Console.WriteLine("获取刚刚新建文件夹的时间:{0}",Directory.GetCreationTime(path));
Console.WriteLine("获取当前程序的目录:{0}",Directory.GetCurrentDirectory());//获取当前程序的目录:C:\Users\HP\source\repos\IOTest\IOTest\bin\Debug\net6.0
Console.WriteLine("获取上一级目录:{0}", Directory.GetParent(path));//获取上一级目录:C:\Users\HP\Desktop
Console.WriteLine("获取目录的根:{0}", Directory.GetDirectoryRoot(path));//获取目录的根:C:\ //移动
string destDirName = Path.Combine(path, "Plugin1");
string sourceName = Path.Combine(path, "temp1");
// Directory.Move(sourceName, destDirName);//创建Plugin1,如果Plugin1文件存在就会引发异常,并且sourceName拷贝过去 //删除
// Directory.Delete(@"C:\Users\HP\Desktop\IOTest\temp1"); //获取文件夹内所有的子文件
string[] Dirs=Directory.GetDirectories(Path.Combine(path, "Plugin1"));//获取子文件夹
string[] files = Directory.GetFiles(Path.Combine(path, "Plugin1"));//获取子文件
string[] files1 = Directory.GetFiles(path, "IOTest*", SearchOption.TopDirectoryOnly);//当前目录获取文件名包含“IOTest”的文件,支持通配符
string[] files2 = Directory.GetFiles(path, "IOTest*", SearchOption.AllDirectories);//获取当前目录和所有子目录以及n层目录文件名包含“IOTest”的文件,支持通配符 //获取文件夹内所有的目录
string[] directory1 = Directory.GetDirectories(path, "Plugin*", SearchOption.TopDirectoryOnly);//当前目录获取目录名字名包含“Plugin”的目录,支持通配符
string[] directory2 = Directory.GetDirectories(path, "Plugin*", SearchOption.AllDirectories);//获取当前目录和所有子目录以及n层目录,目录名包含“Plugin”的目录,支持通配符 //获取FileSystem(file+directory)条目
string[] fileAnddirectory1 = Directory.GetFileSystemEntries(path, "Plugin*", SearchOption.TopDirectoryOnly);
string[] fileAnddirectory2 = Directory.GetFileSystemEntries(path, "Plugin*", SearchOption.AllDirectories); //枚举文件加内所有文件目录条码
string docPath1 = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
List<string> dirs = new List<string>(Directory.EnumerateDirectories(docPath1)); //获取操作系统内置文件夹
string docPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
//设置CurrentDirectory Console.WriteLine(Environment.CurrentDirectory);
AssemblyLoadContext ss = new AssemblyLoadContext("sd"); //获取计算机盘符
string[] drivers = Directory.GetLogicalDrives(); //设置创建文件夹的时间
Directory.CreateDirectory(Path.Combine(path, "Test"));
Directory.SetCreationTime(Path.Combine(path, "Test"), DateTime.Today.AddDays(7));//设置文件夹创建时间
Console.WriteLine(Directory.GetCreationTime(Path.Combine(path, "Test")));//获取创建文件夹的时间
Console.WriteLine(Directory.GetLastAccessTime(Path.Combine(path, "Test")));//获取文件夹的最后访问时间 //获取目录下的所有文件夹和文件名的路径的条目
string[] allfilesAndDirectory = Directory.GetFileSystemEntries(path);
foreach (string file in allfilesAndDirectory)
{
Console.WriteLine($"allfilesAndDirectory:{file }"); } string[] paths = { @"d:\archives", "2001", "media", "images" };
string fullPath = Path.Combine(paths);
Console.WriteLine(fullPath); paths = new string[] { @"d:\archives\", @"2001\", "media", "images" };
fullPath = Path.Combine(paths);
Console.WriteLine(fullPath); paths = new string[] { "d:/archives/", "2001/", "media", "images" };
fullPath = Path.Combine(paths);
Console.WriteLine(fullPath); //删除temp 临时文件夹
// Directory.Delete(@"IOTest\temp1");
//程序执行完成后恢复当前目录
Directory.SetCurrentDirectory(AppDomain.CurrentDomain.BaseDirectory); } } }

绝对路径案例:

using System.IO;
using System.Runtime.Loader; namespace IoTest; public class IoTest
{ public static string getNewDesktopDirectory(string directoryName)
{ string desstr = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
string path = Path.Combine(desstr, directoryName);
return path;
} static void Main()
{
string path = getNewDesktopDirectory("IOTest");
string path1= getNewDesktopDirectory(Path.Combine(path, "temp1")); if (Directory.Exists(path))
{ //创建文件夹
DirectoryInfo directoryInfo=Directory.CreateDirectory(path);//
Console.WriteLine("判断新建的文件夹是否存在:{0}", Directory.Exists(path));//判断新建的文件夹是否存在:True
Console.WriteLine("获取刚刚新建文件夹的时间:{0}",Directory.GetCreationTime(path));
Console.WriteLine("获取当前程序的目录:{0}",Directory.GetCurrentDirectory());//获取当前程序的目录:C:\Users\HP\source\repos\IOTest\IOTest\bin\Debug\net6.0
Console.WriteLine("获取上一级目录:{0}", Directory.GetParent(path));//获取上一级目录:C:\Users\HP\Desktop
Console.WriteLine("获取目录的根:{0}", Directory.GetDirectoryRoot(path));//获取目录的根:C:\ //移动
string destDirName = Path.Combine(path, "Plugin1");
string sourceName = Path.Combine(path, "temp1");
// Directory.Move(sourceName, destDirName);//创建Plugin1,如果Plugin1文件存在就会引发异常,并且sourceName拷贝过去 //删除
// Directory.Delete(@"C:\Users\HP\Desktop\IOTest\temp1"); //获取文件夹内所有的子文件夹
string[] Dirs=Directory.GetDirectories(Path.Combine(path, "Plugin1"));//获取子文件夹
string[] files = Directory.GetFiles(Path.Combine(path, "Plugin1"));//获取子文件
string[] files1 = Directory.GetFiles(Path.Combine(path, "Plugin1"), "IOTest*", SearchOption.TopDirectoryOnly);//当前目录获取文件名包含“IOTest”的文件,支持通配符
string[] files2 = Directory.GetFiles(Path.Combine(path, "Plugin1"), "IOTest*", SearchOption.AllDirectories);//当前目录和所有子目录获取文件名包含“IOTest”的文件,支持通配符 //获取操作系统内置文件夹
string docPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
//设置CurrentDirectory
Directory.SetCurrentDirectory(path);
Console.WriteLine(Environment.CurrentDirectory);
AssemblyLoadContext ss = new AssemblyLoadContext("sd"); //获取计算机盘符
string[] drivers = Directory.GetLogicalDrives(); //设置创建文件夹的时间
Directory.CreateDirectory(Path.Combine(path, "Test"));
Directory.SetCreationTime(Path.Combine(path, "Test"), DateTime.Today.AddDays(7));//设置文件夹创建时间
Console.WriteLine(Directory.GetCreationTime(Path.Combine(path, "Test")));//获取创建文件夹的时间
Console.WriteLine(Directory.GetLastAccessTime(Path.Combine(path, "Test")));//获取文件夹的最后访问时间
//获取目录下的所有文件夹和文件名完整的路径
string[] allfilesAndDirectory = Directory.GetFileSystemEntries(path);
foreach (string file in allfilesAndDirectory)
{
Console.WriteLine($"allfilesAndDirectory:{file }"); }
} } }

Path类

using System.IO;

Path类的静态方法:

ChangeExtension 更改路径字符串的扩展名。

Combine(String()) 将字符串数组组合成一个路径。

Combine(String, String) 将两个字符串组合成一个路径。

Combine(String, String, String) 将三个字符串组合成一个路径。

Combine(String, String, String, String) 将四个字符串组合成一个路径。

GetDirectoryName 返回指定路径字符串的目录信息。

GetExtension 返回指定的路径字符串的扩展名。

GetFileName 返回指定路径字符串的文件名和扩展名。

GetFileNameWithoutExtension 返回不具有扩展名的指定路径字符串的文件名。

GetFullPath 返回指定路径字符串的绝对路径。

GetInvalidFileNameChars 获取包含不允许在文件名中使用的字符的数组。

GetInvalidPathChars 获取包含不允许在路径名中使用的字符的数组。

GetPathRoot 获取指定路径的根目录信息。

GetRandomFileName 返回随机文件夹名或文件名。

GetTempFileName 创建磁盘上唯一命名的零字节的临时文件并返回该文件的完整路径。

GetTempPath 返回当前用户的临时文件夹的路径。

HasExtension 确定路径是否包括文件扩展名。

IsPathRooted 获取指示指定的路径字符串是否包含根的值。

path类操作实例

 //1.更改路径字符串的扩展名

        string path12 = @"C:\Users\HP\Desktop\IOTest\IOTest.txt";
//更改扩展名,不会改变本地文件的扩展名
string changeExtension = Path.ChangeExtension(path12, ".txb");
Console.WriteLine(changeExtension);
//如果 path 不具有扩展名,并且 extension 不是 null,则返回的路径字符串包含 extension,它追加到 path 的结尾。
string s2 = Path.ChangeExtension(@"D:\wang1\wang", ".dll");//返回D:\wang1\wang.dll
Console.WriteLine(s2); //2. 合并两个字符路径字符串 Join和combin
//join和Combin的区别就是 Combin会丢弃前面不是路径的路径 string path21 = @"C:\Users\HP\Desktop\IOTest";
string path32 = @"C:\Users\HP\Desktop\IOTest\IOTest.txt";
Console.WriteLine(Path.Combine(path21, @"\Plugin"));//\Plugin是相对路径。这样写直接返回相对路径
Console.WriteLine(Path.Join(@"c:\temp.txt", @"\Plugin")); //c:\temp.txt\Plugin
Console.WriteLine(Path.Combine(path21, @"Plugin"));//C:\Users\HP\Desktop\IOTest\Plugin
Console.WriteLine(Path.Combine(@"c:\temp.txt", @"\subdir\file.txt"));//c:\temp.txt\subdir\file.txt //3.获取指定路径字符串的目录信息 string fileName3 = @"C:\mydir\myfile.ext";
string path3 = @"C:\mydir\";
string rootPath3 = @"C:\";
Console.WriteLine(Path.GetDirectoryName(fileName3));//返回:'C:\mydir'
Console.WriteLine(Path.GetDirectoryName(path3)); ;//返回:'C:\mydir'
Console.WriteLine(Path.GetDirectoryName(rootPath3)) ;////返回:'' // 4.获取指定路径字符串的扩展名 string fileName4 = @"C:\mydir.old\myfile.ext";
string path4 = @"C:\mydir.old\";
Console.WriteLine(Path.GetExtension(fileName4));//返回 : '.ext'
Console.WriteLine(Path.GetExtension(path4));//返回 :'' //5.GetFileName
Directory.SetCurrentDirectory(Environment.GetFolderPath(Environment.SpecialFolder.Desktop));
string path = @"D:\程序开发\vs2022\自定义快捷键\LinNotifyFilter.snippet"; Console.WriteLine($"获取是否包含根目录:{Path.IsPathRooted(path)}");
if (Path.IsPathRooted(path))
{ Console.WriteLine($"获取更目录:{Path.GetPathRoot(path)}");
} Console.WriteLine($"获取目录分隔符:{Path.DirectorySeparatorChar}");
Console.WriteLine($"获取反斜杠:{Path.AltDirectorySeparatorChar}");
Console.WriteLine($"获取盘符:{Path.VolumeSeparatorChar}");
Console.WriteLine($"获取文件名:{Path.GetFileName(path)}");
Console.WriteLine($"获取文件名不带扩展名:{Path.GetFileNameWithoutExtension(path)}"); Console.WriteLine($"是否有扩展名:{Path.HasExtension(path)}");
if (Path.HasExtension(path))
{
Console.WriteLine($"获取扩展名:{Path.GetExtension(path)}");
Console.WriteLine($"更改文件扩展名:{Path.ChangeExtension(path, ".txt")}");
} Console.WriteLine($"获取相对地址:{Path.GetRelativePath(@"D:\程序开发", path)}");
Console.WriteLine($"生成随机文件夹名字:{Path.GetRandomFileName()}");
Console.WriteLine($"获取系统随机文件路径:{Path.GetTempPath()}");
Console.WriteLine($"是否完全限定或者UNC:{Path.IsPathFullyQualified(path)}");
//join和Combin的区别就是 Combin回丢弃前面不是路径的路径
Console.WriteLine($"Jion连接文件名:{Path.Join("Path1","Path2",@"\Path3")}");
Console.WriteLine($"Combine连接路径:{Path.Combine(path, "Path2", @"\Path3")}");

注意事项:错误的写法  将两个字符串组合成一个路径Combine(@“c:\sdf”,@"\test") 后面一个如果用相对路径,则返回相对路径\test。如果是目录名字则返回c:\sd\test

C# .NET 获取路径信息

Application.StartupPath  // 获取启动了应用程序的可执行文件的路径,不包括可执行文件的名称。 

 Application.ExecutablePath  // 获取启动了应用程序的可执行文件的路径,包括可执行文件的名称。  
AppDomain.CurrentDomain.BaseDirectory  // 获取基目录,它由程序集冲突解决程序用来探测程序集。  
Thread.GetDomain().BaseDirectory  // 获取基目录,它由程序集冲突解决程序用来探测程序集。 
 Environment.CurrentDirectory  // 获取或设置当前工作目录的完全限定路径。  
Directory.GetCurrentDirectory()  // 获取应用程序的当前工作目录。  
Assembly.GetExecutingAssembly().Location // 获取包含清单的已加载文件的路径或 UNC 位置。

通过Request属性获取:

// 获取当前正在执行的服务器应用程序的根目录的物理文件系统路径。

Request.PhysicalApplicationPath;    // E:\解决方案\项目\// 获取与请求的 URL 相对应的物理文件系统路径。 
Request.PhysicalPath;   // E:\\解决方案\项目\zz\zz.aspx

获取虚拟路径和URL信息:(URL:http://localhost/aspnet/zz/zz.aspx/info?name=wk )

// 获取服务器上 ASP.NET 应用程序的虚拟应用程序根路径:/Request.ApplicationPath;// /aspnet  // 获取应用程序根的虚拟路径,并通过对应用程序根使用波形符 (~) 表示法使该路径成为相对路径。

Request.AppRelativeCurrentExecutionFilePath;   // ~/zz/zz.aspx  // 获取当前请求的虚拟路径
Request.CurrentExecutionFilePath;// /aspnet/zz/zz.aspxRequest.FilePath;// /aspnet/zz/zz.aspx  // 获取CurrentExecutionFilePath属性中指定的文件名的扩展名。
Request.CurrentExecutionFilePathExtension;  // .aspx   // 获取当前请求的虚拟路径(包括附件路径信息)
Request.Path;// /aspnet/zz/zz.aspx/info  // 获取具有 URL 扩展名的资源的附加路径信息。

Request.PathInfo; // /info  // 获取有关当前请求的 URL 的信息。Request.Url;//http://localhost/aspnet/zz/zz.aspx/inf?name=wk  // 获取当前请求的原始 URLRequest.RawUrl; // /aspnet/zz/zz.aspx/inf?name=wk  // 获取有关客户端上次请求的 URL 的信息,该请求链接到当前的 URL。Request.UrlReferrer;// System.Uri

DirectoryInfo类

 static void Main()
{
//把桌面设置问当前目录变量
Directory.SetCurrentDirectory(Environment.GetFolderPath(Environment.SpecialFolder.Desktop)); DirectoryInfo yiNianJi = new DirectoryInfo("yinianji");//一年级
yiNianJi.Create();//创建文件夹
if (yiNianJi.Exists)
{
//创建子目录
DirectoryInfo yiBan = yiNianJi.CreateSubdirectory("yiban");//一班
DirectoryInfo erBan = yiNianJi.CreateSubdirectory("erban");//二班
DirectoryInfo sanBan = yiNianJi.CreateSubdirectory("sanban");//三班
//属性
Console.WriteLine($"Name:{yiNianJi.Name}");
Console.WriteLine($"FullName:{yiNianJi.FullName}");
Console.WriteLine($"Root:{yiNianJi.Root}");
Console.WriteLine($"Parent:{yiNianJi.Parent}");
////从目录信息里提取其中的安全访问信息
var directorySever = yiNianJi.GetAccessControl(); //设置文件夹权限
directorySever.AddAccessRule(new FileSystemAccessRule("users", FileSystemRights.FullControl, AccessControlType.Deny)); yiNianJi.SetAccessControl(directorySever);
//新建NewTempDir,然后把文件夹下的内容复制到NewTempDir
yiNianJi.MoveTo("NewTempDir");//把文件夹下的内容赋值移动到"NewTempDir,并且删除yinianji文件夹,如果已经存在NewTempDir会引发异常
// 获取文件夹下的文件夹和文件
var systeminfo = yiNianJi.GetFileSystemInfos();
var systeminfo1 = yiNianJi.GetFileSystemInfos("sanb*");
}
 directorySever.AddAccessRule(new FileSystemAccessRule("users", FileSystemRights.FullControl, AccessControlType.Deny));
"users"是 用户组别

 AccessControlType枚举

AccessControlType.Deny 禁止访问

AccessControlType.Allow 允许访问

FileSystemRights 枚举

AppendData:附加数据
ChangePermissions:更改权限
CreateDirectories:创建文件夹/附加数据
CreateFiles:创建文件/写入数据
Delete:删除
DeleteSubdirectoriesAndFiles:删除子文件夹及文件
ExecuteFile:执行文件
FullControl:完全控制
ListDirectory:列出文件夹/读取数据
Modify:修改
Read:读取
ReadAndExecute:读取和执行
ReadAttributes:读取属性
ReadData:读取数据
ReadExtendedAttributes:读取扩展属性
ReadPermissions:读取权限
Synchronize:同步
TakeOwnership:更改文件(夹)所有者
Traverse:执行程序
Write:写入
WriteAttributes:写入属性
WriteData:写入数据
WriteExtendedAttributes:写入扩展属性

注意:

AccessControlType.Deny" 仅在 'windows' 上受支持
FileSystemAccessRule" 仅在 'windows' 上受支持
FileSystemAclExtensions.GetAccessControl(DirectoryInfo)" 仅在 'windows' 上受支持。
FileSystemAclExtensions.GetAccessControl(DirectoryInfo)" 仅在 'windows' 上受支持。
FileSystemSecurity.AddAccessRule(FileSystemAccessRule)" 仅在 'windows' 上受支持。

 DriveInfo类

驱动力主要的操作,就是读取 盘的是否准备好、盘类型(u盘、硬盘、磁盘等)、电脑分区、盘大小、剩余空间。

 static void Main()
{
//获取电脑上所有的驱动盘
DriveInfo[] driveInfo = DriveInfo.GetDrives();
foreach (DriveInfo ite in driveInfo)
{
//输出分区名字
Console.WriteLine($"输出分区名字{ite.Name}"); //判断是不是移动盘 u盘 移动硬盘等
if (ite.DriveType == DriveType.Removable) { Console.WriteLine($"{ite.Name} 是移动盘"); }
//分区类型
Console.WriteLine($"分区类型:{ite.DriveType}");//Fixed 固定
//分区格式
Console.WriteLine($"分区格式:{ite.DriveFormat}");
//分区大小
Console.WriteLine($"分区大小:{ite.TotalSize}");
//驱动器上的可用空闲空间总量(以字节为单位)
Console.WriteLine($"驱动器上的可用空闲空间总量:{ite.TotalFreeSpace}");
//驱动是否挂载好了
Console.WriteLine($"驱动是否挂载好了:{ite.IsReady}");
//分区标签名字
Console.WriteLine($"分区标签名字:{ite.VolumeLabel}");
Console.WriteLine();
}
枚举 DriveType:
CDRom     5 驱动器是一个光盘设备,如 CD 或 DVD-ROM
Fixed     3  驱动器是一个固定磁盘
Network     4  驱动器是一个网络驱动器
NoRootDirectory     1 驱动器没有根目录
Ram  6  驱动器是一个 RAM 磁盘
Removable  2     驱动器是一个可移动存储设备,如 U 盘
Unknown     0   驱动器类型未知。

File类

File主要操做,Open、append、write、read、copy、movie、replace、create、文件属性的设置

注意事项:1、Encrypt、Decypt 功能不建议在 .NET Core 中使用此 API;windows home 不使用此功能。

2、File.WriteAllLines能写入string[]和IEnumerable<String> ,File.AppendAllLines只能写入IEnumerable<String>

3、File的open方法 要用到FileAccess枚举、FileMode 枚举、FileShare枚举

案例代码

//
using System.Text; string appPath = AppDomain.CurrentDomain.BaseDirectory;
string desktopPath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
string[] content = { "sfsdfsdf", "sfsfsdfsdfsdf", "sfsdfsdfsfsdf", "sfsfsdfsdfsd" };
string firstline = "=File.Create this is i write first line";
byte[] byteFirstLine = Encoding.UTF8.GetBytes(firstline);
if (appPath != desktopPath)
{
Directory.SetCurrentDirectory(desktopPath); }
DirectoryInfo main = new("main");
if (main.Exists)
{ }
else
{
main.Create(); }
string readmetxt = Path.Join(main.FullName, "readme.txt");
//File创建文件
FileStream readme = File.Create(readmetxt);
using (readme)
{ readme.Write(byteFirstLine, 0, byteFirstLine.Length); } //创建或打开用于写入 UTF-8 编码文本的文件。 如果该文件已存在,将覆盖其内容。
StreamWriter swreadme = File.CreateText(readmetxt);
using (swreadme)
{
swreadme.WriteLine("File.CreateText this is i write scond line");
}
//append操作 向一个文件中追加行,然后关闭该文件。
File.AppendAllLines(readmetxt, content);
File.AppendAllText(readmetxt, "File.AppendText"); //创建一个 StreamWriter,它将 UTF-8 编码文本追加到现有文件或新文件(如果指定文件不存在)。
StreamWriter fileAppendText = File.AppendText(readmetxt);
using (fileAppendText)
{
fileAppendText.WriteLine("fileAppendText");
} //将现有文件复制到新文件。 允许覆盖同名的文件。
string backuptxt = Path.Combine(main.FullName, "backUp.txt");
File.Copy(readmetxt, backuptxt, true);
//将现有文件复制到新文件。 不允许覆盖同名的文件
File.Copy(readmetxt, backuptxt, true); // File.Encrypt(@"main\Encypt.txt");不建议在 .NET Core 中使用此 API;windows home 不能使用此功能,所以做演示了 Console.WriteLine(File.GetCreationTime(readmetxt));
Console.WriteLine(File.GetLastAccessTime(readmetxt));
Console.WriteLine(File.GetLastWriteTime(readmetxt));
Console.WriteLine(File.GetAttributes(readmetxt)); //将指定文件移到新位置,提供要指定新文件名的选项。
string backup = Directory.EnumerateDirectories(main.FullName,"backUp").First();
string readmebackupPath = Path.Combine(backup, "readmebackup.txt");
if (!File.Exists(readmebackupPath))
{
File.Move(backuptxt, readmebackupPath);
//将指定文件移动到新位置,提供指定新文件名和覆盖目标文件(如果它已存在)的选项。
string readmebackup = Path.Join(main.FullName, "backUp\readmebackup.txt");
File.Move(backuptxt, readmebackupPath, true);
} /* 这部分代码要一个一个测试
// open操作 zhe
File.OpenText(readmetxt);
File.Open(backuptxt,FileMode.Append);
//File.OpenRead(backuptxt);
// File.OpenWrite(backuptxt); // read操作
File.ReadAllBytes(readmetxt);
File.ReadAllLines(readmetxt);
File.ReadAllText(readmetxt);
File.ReadLines(readmetxt); //支持foreach //write 操作
File.WriteAllBytes(backuptxt, byteFirstLine);
File.WriteAllLines(backuptxt, content);
File.WriteAllText(backuptxt, "File.WriteAllText");// 可写入数组和list<string> 列表 //replace
string back2txt = Path.Combine(main.FullName, "back2.txt");
File.Create(back2txt);
File.Replace(readmetxt, back2txt, Path.Combine(main.FullName, "back2.txt.bac"));
*/
File.SetCreationTime(readmetxt, DateTime.Now);
File.SetLastAccessTime(readmetxt, DateTime.Now);
File.SetLastWriteTime(readmetxt, DateTime.Now);

FileInfo类

fileinfo 没有read、write方法,只有open、creat 、append。主要的文件操作方法在File类中。

fileinfo的open方法 要用到FileAccess枚举、FileMode 枚举

using System.Text;

string appPath = AppDomain.CurrentDomain.BaseDirectory;
string desktopPath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
string[] content = { "sfsdfsdf", "sfsfsdfsdfsdf", "sfsdfsdfsfsdf", "sfsfsdfsdfsd" };
string firstline = "=File.Create this is i write first line";
byte[] byteFirstLine = Encoding.UTF8.GetBytes(firstline);
if (appPath != desktopPath)
{
Directory.SetCurrentDirectory(desktopPath); }
DirectoryInfo main = new("main");
if (main.Exists)
{ }
else
{
main.Create(); }
string readmetxt = Path.Join(main.FullName, "readme.txt");
//creat
FileInfo mainFileInfo = new FileInfo(readmetxt);
FileStream fs= mainFileInfo.Create();
StreamWriter fs2=mainFileInfo.CreateText();
using (fs) {
fs.Write(byteFirstLine, 0, byteFirstLine.Length);
}
StreamWriter sw= mainFileInfo.AppendText( );
using (sw)
{
sw.WriteLine("fileInfo.AppendText");
}
//appendText
StreamWriter appendtext = mainFileInfo.AppendText(); //open
FileStream fsOpenRead = mainFileInfo.OpenRead();
FileStream fsOpen = mainFileInfo.Open (FileMode.Open,FileAccess.Read);
FileStream fsOpenWrite = mainFileInfo.OpenWrite(); //属性
Console.WriteLine(mainFileInfo.FullName);
Console.WriteLine(mainFileInfo.Name);
Console.WriteLine(mainFileInfo.Directory);
Console.WriteLine(mainFileInfo.DirectoryName);
Console.WriteLine(mainFileInfo.Length);
Console.WriteLine(mainFileInfo.IsReadOnly); //moveto
main.MoveTo("back.txt"); //copyto
mainFileInfo.CopyTo("copy.txt"); //repalce
mainFileInfo.Replace("readmetxt.txt","sfafaf.txt");

FileStream swFileStream = fileInfo.Open(FileMode.Truncate, FileAccess.Read);

FileMode  模式枚举

一.FileMode.Append

Append追加:
如果文件存在,则打开文件,把指针指到文件的末尾;如果不存在,则新建文件

二.FileMode.Create
Create:新建
如果文件存在,则覆盖原有文件,把指针指到文件的开始,文件的创建日期不会更新;
如果文件不存在,则新建文件

三.FileMode.CreateNew
CreateNew:新建新的文件
如果文件存在,则产生异常;如果文件不存在,则产生异常

四.FileMode.OpenOrCreate
OpenOrCreate:打开或是新建
如果文件存在,则打开文件,把指针指到文件的开始;如果文件不存在,则新建文件

五. FileMode.Truncate
如果文件存在,则打开文件,清除这个文件中的内容,把指针指到文件的开始,保留最初文件的创建日期(重写);如果文件不存在,则产生异常

六. FileMode.Open
Open:打开文件
如果文件存在,则打开文件,把指针指到文件的开始;如果不存在,则产生异常

FileAccess访问枚举

FileAccess用于控制对文件的读访问、写访问或读/写访问的常熟。从源代码可以看到FileAccess是一个简单枚举。

枚举成员        成员值          描述

Read           1           对文件的读访问,拥有读取权限。

Write            2           对文件的写访问,拥有写入权限。

ReadWrite         3           对文件的读访问和写访问,拥有读取和写入权限。

FileShare 枚举(文件读写锁)

FileStream类

File/FileInfo的 Create、Open、OpenWrite、OpenRead会产生   FileStream 。

File/FileInfo的 AppendText、CreateText、OpenText和FIle的WriteAllText 会产生 StreamWriter。

【C# IO 操作】 Path 路径类 |Directory类 |DirectoryInfo 类|DriveInfo类|File类|FileInfo类|FileStream类的更多相关文章

  1. 使用File类、StreamRead和StreamWrite读写数据、以及Path类操作文件路径和Directory

    1.File类的概念: File类,是一个静态类,主要是来提供一些函数库用的.静态实用类,提供了很多静态的方法,支持对文件的基本操作,包括创建,拷贝,移动,删除和 打开一个文件. File类方法的参量 ...

  2. C#回顾 - 2.NET的IO:Path、File、FileInfo、Directory、DirectoryInfo、DriveInfo、FileSystemWatcher

        1.管理文件系统 一般而言,应用程序都会有保存数据.检索数据的需求. 1.1 使用 path 类来访问文件路径 [path常用的方法]:http://www.cnblogs.com/tangg ...

  3. .NET中的IO操作基础介绍

    关于IO简介 .NET中的IO操作,经常需要调用一下几个类. clipboard[] .FileStream类 文件流类,负责大文件的拷贝,读写. .Path类 Path类中方法,基本都是对字符串(文 ...

  4. C#对文件/目录的操作:Path、File、Directory、FileStream、StreamReader、StreamWriter等类的浅析

    以下类的命名空间都是:System.I/0; 一.Path:主要对文件路径的操作! 常用方法: String path=@"C:\a\b\c\123.txt"; 1-1.Path. ...

  5. C# IO操作(二)File类和Directory类的常用方法

    本篇主要介绍一些常用的IO操作,对文件和目录的操作:留给自己复习之用. 1.创建文件 string sPath1=Path.GetDirectoryName(Assembly.GetExecuting ...

  6. System.IO中的File、FileInfo、Directory与DirectoryInfo类(实例讲解)

    一.建立的文件夹(对这些文件进行以上四个类的操作): 父目录: 父目录的子目录以及父目录下的文件: 子目录下的文件: 二.效果图 三.代码实现 using System; using System.I ...

  7. .net学习之集合、foreach原理、Hashtable、Path类、File类、Directory类、文件流FileStream类、压缩流GZipStream、拷贝大文件、序列化和反序列化

    1.集合(1)ArrayList内部存储数据的是一个object数组,创建这个类的对象的时候,这个对象里的数组的长度为0(2)调用Add方法加元素的时候,如果第一次增加元神,就会将数组的长度变为4往里 ...

  8. C#面向对象13 文件类操作 Path/File/FileStream

    1.path using System; using System.Collections.Generic; using System.Linq; using System.Text; using S ...

  9. Java的IO操作---File类

    目标 1)掌握File类作用 2)可以使用file类中方法对文件进行读写操作. File类 唯一与文件有关的类.使用file类可进行创建或删除操作,要想使用File类,首先观察File类的构造方法. ...

随机推荐

  1. 集合框架-LinkedHashSet集合(有序唯一)

    1 package cn.itcast.p4.hashset.demo; 2 3 import java.util.HashSet; 4 import java.util.Iterator; 5 im ...

  2. Ubuntu14.4配置vnc

    一.安装Xrdp Windows远程桌面使用的是RDP协议,所以ubuntu上就要先安装Xrdp,在ubuntu软件中心搜索xrdp安装. 安装xrdp的同时会自动安装vnc4server,xbase ...

  3. TCP可靠性

    目录 一:TCP可靠性 1.通过序列号与确认应答提高可靠性 一:TCP可靠性 简介 TCP 通过检验和.序列号.确认应答.重发控制.连接管理以及窗口控制等机制实现可靠性传输. 1.通过序列号与确认应答 ...

  4. 西安腾讯DevOps面试题python算法输出列表数值下界

    给定一个列表,然后给一个目标值,列表中两数求和等于目标值,要求输出列表两数的下界 如 list = [1,2,3,4,6,7,8] num=10 #!/usr/bin/python #coding=u ...

  5. python中True和False

    python中只有0代表False,只有1代表True,注意只有!! if x: print('True') 只要x是非零数值.非空字符串.非空list等,就判断为True,否则为False.

  6. APP 性能分析工作台——你的最佳桌面端性能分析助手

    目前 MARS-App 性能分析工作台版本为开发者提供Fastbot桌面版的服务. 旨在帮助开发者们更快.更便捷地开启智能测试之旅,成倍提升稳定性测试的效率. 作者:字节跳动终端技术--王凯 背景 F ...

  7. 带你十天轻松搞定 Go 微服务系列(八、服务监控)

    序言 我们通过一个系列文章跟大家详细展示一个 go-zero 微服务示例,整个系列分十篇文章,目录结构如下: 环境搭建 服务拆分 用户服务 产品服务 订单服务 支付服务 RPC 服务 Auth 验证 ...

  8. 【源码】Redis exists命令bug分析

    本文基于社区版Redis 4.0.8 1.复现条件 版本:社区版Redis 4.0.10以下版本 使用场景:开启读写分离的主从架构或者集群架构(master只负责写流量,slave负责读流量) 案例: ...

  9. RocketMQ在Windows和Linux下的安装

    windows下的RocketMQ的安装 鉴于Quick Start,选择单mater模式,环境简单: win10 64 jdk1.8 maven 3.5.4 Git rocketMQ安装版本 4.4 ...

  10. Java程序性能监控工具

    系统性能监控: 确定系统运行的整体状态,基本定位问题所在 uptime命令 [root@localhost ~]# uptime23:19:38 up 244 days, 3:39, 34 users ...