本篇继续前两篇内容,跟大家介绍一下Path类以及FileSystemInfo这个类的主要方法和属性。

上文提到,在《C# 基础知识系列-IO篇》之文件相关的内容完结之后,会带领大家开发一个小工具-快速检索文件所在目录。

1.3. Path

Path的中文名称有路径的意思,所以Path类就是路径类,C#把Path设置为工具类,路径的实例被区分为文件和目录了。以下是它的定义:

public static class Path

路径是描述文件和目录的位置的字符串,路径并不一定指向硬盘上,换句话说就是路径不一定是物理路径也有可能是虚拟路径或者网络路径。在不同的操作系统和平台上,路径有着不同的表现,所以Path类是对不同平台行为的统一抽象。具体的路径表示需要参照具体的系统表示形式。

那么我们先来看看Path为我们提供了哪些内容,让我们一睹为快:

1.3.1 字段

public static readonly char AltDirectorySeparatorChar;public static readonly char DirectorySeparatorChar;

这两个是特定系统下的目录分隔符,其中AltDirectorySeparatorChar表示正斜线(/),DirectorySeparatorChar 表示反斜线()。为什么说是特定系统下的目录分隔符呢,因为Windows环境对两种分隔符都支持,但是Unix和类Unix系统只支持 / 作为目录分隔符。所以如果系统需要跨平台支持,则最好使用 AltDirectorySeparatorChar作为目录分隔符来使用。

public static readonly char PathSeparator;

这个字段返回在环境变量中分隔路径字符串的平台特定的分隔符。Windows中返回一个分号(;),其他平台可能会有不一样的表现。

public static readonly char VolumeSeparatorChar;

这个表示卷分隔符,是个很有意思的特定。对于Linux系统来说并没有类似于Windows一样的卷,所以该字段会返回一个/ ,而Windows中例如:

D:Temp 这个目录则会返回冒号(:)。

1.3.2 方法

介绍完了字段,我们来看看Path给我们提供了哪些方法吧。

先从最常用的说起吧:

public static string Combine (params string[] paths);public static string Combine (string path1, string path2);public static string Combine (string path1, string path2, string path3);public static string Combine (string path1, string path2, string path3, string path4);

这一组方法用来拼接路径,除第一个参数外,每个参数都应当是相对于之前参数拼接结果路径的相对路径。如果后续出现了绝对路径,那之前计算出的路径信息则会全部抛弃,重新计算。

以下是一个示例:

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); // Windows系统下的执行结果//    d:archives2001mediaimages//    d:archives2001mediaimages//    d:/archives/2001/mediaimages 类Unix系统的执行结果//    d:archives/2001/media/images//    d:archives/2001/media/images//    d:/archives/2001/media/images 

继续下一个方法:

public static string GetFullPath (string path, string basePath);public static string GetFullPath (string path);

获取相对路径的绝对路径,其中 path 是相对路径,basePath是绝对路径。如果指定basePath,则从basePath根据path计算全路径。

public static string GetRelativePath (string relativeTo, string path);

返回从一个路径到另一个路径的相对路径,其中relativeTo是源路径,path为目标路径。其中relativeTo始终是目录,或者被认为是目录。

public static string GetDirectoryName (string path);

返回路径path里的目录信息,例如:"C:DirectorySubDirectoryest.txt" ,返回"C:DirectorySubDirectory",如果path是目录,则返回其上级目录的路径字符串。

public static string Join (string path1, string path2, string path3, string path4);public static string Join (string path1, string path2, string path3);public static string Join (params string[] paths);

与Combine方法差不多,不过Join方法是把所以参数均按照相对目录来拼接。

说完了目录的一些操作,我们看看Path对文件路径提供了哪些支持:

public static string GetFileName (string path);

获取路径里的文件名,例如说:“C:mydirmyfile.ext”,返回结果就是“myfile.ext”,也就是说这个方法会返回携带后缀名的文件名。因为文件名本身就包含后缀名。

public static string GetFileNameWithoutExtension (string path);

返回不带后缀名的文件名,与GetFileName类似,但是不好含文件格式后缀。

public static bool HasExtension (string path);

确定是否包含后缀名,也称格式名或者扩展名。

public static string GetExtension (string path);

返回所代表的文件的后缀名。

public static string ChangeExtension (string path, string extension);

修改文件的后缀名。

这些是Path的常用方法,大家有个印象就好。

1.3 FileSystemInfo

文件系统信息,这是FileInfo和DirectoryInfo的两个类的基类,它定义了文件系统中文件和目录共有的一些属性和方法。接下来让我们简单看一看。

先来看一下类的声明:

public abstract class FileSystemInfo : MarshalByRefObject, System.Runtime.Serialization.ISerializable

一个abstract类,这个标记意味着这个类是一个抽象类,抽象类不能直接实例化,所以我们可能不会自己去直接实例化一个FileSystemInfo了。

所以我们先略过FileSystemInfo的构造函数,直接看属性和方法。

public System.IO.FileAttributes Attributes { get; set; }

获取或者设置当前文件或目录的特性,这个特性是一个枚举,而且是一个位标记的枚举类型。

通过以下方式进行判断:

FileSystemInfo fsi;bool isXXX = (fsi.Attributes & FileAttributes.XXX) == FileAttributes.XXX; 
public DateTime CreationTime { get; set; }public DateTime CreationTimeUtc { get; set; }

返回文件/目录的创建时间,其中UTC指协调世界时 。

public string Extension { get; }

获取文件的文件后缀名(扩展名),带点号(.)。

public virtual string FullName { get; }public abstract string Name { get; }

都是返回文件或目录的名称,不过FullName返回的是全路径名称,Name只返回了文件名。

public DateTime LastAccessTime { get; set; }public DateTime LastAccessTimeUtc { get; set; }

获取或设置文件最后一次访问的时间,该属性的返回值并不是严格意义上的最后一次访问时间,因为部分系统不会及时更新。

public DateTime LastWriteTime { get; set; }public DateTime LastWriteTimeUtc { get; set; }

最后一次修改时间,可以自己设置或修改,类似与LastAccessTime,可能不是正确的值。

2. 总结

到目前为止,常用的文件API已经介绍完毕。接下来将为大家演示各种流的使用,以及各种流的操作场景。

更多内容烦请关注我的博客《高先生小屋》

c# 获取路径的盘符_C# IO操作之 如何玩转路径相关推荐

  1. c# 获取路径的盘符_C# 如何获取映射网络驱动器的共享路径 | 学步园

    1. 映射一个网络驱动器: 2. 完成映射后将在资源管理器中看到新增的盘符 Z 3. 使用下面的代码我们能很容易的获取到本地映射网络驱动器的网络路径. using System; using Syst ...

  2. c# 获取路径的盘符_c#获取驱动器盘符

    在编写某些Windows管理应用程序时,能够从自定义的驱动器选择列表框中进行选择无疑是非常专业的,使用Delphi或者C++的早期版本时我们都必须使用Win32所提供的许多关于获取磁盘信息的API函数 ...

  3. python 获取路径的盘符_python获取磁盘号下盘符步骤详解

    这次主要教的是如何通过Python 获取Windows系统下的所有的磁盘盘符,以列表的形式展示出来,获取磁盘号下的盘符包括能够获取到我们正在插在电脑上的U盘,也可以读取到,希望能够对你们在学习过程中有 ...

  4. c# 判断是否存在次盘符_C# 怎么自动识别U盘盘符 进行判断 读写操作

    你的位置: 问答吧 -> .NET -> 问题详情 C# 怎么自动识别U盘盘符 进行判断 读写操作 C# 怎么自动识别U盘盘符 然后判断里面是否存在某个特定的TXT文件 不存在的话就创建这 ...

  5. Advanced Installer修改默认安装路径判断盘符是否存在

    由于程序运行权限问题,公司要求默认路径要使用D盘,这样就需要做一个判断,判断D盘是否存在(部分客户只有一个C盘的盘符),这里只是举例说明,不排除客户没C盘的可能. 更好的做法是先默认C盘(Progra ...

  6. Qt5.9获取Windows所有盘符(函数QFileInfoList QIr::drives())

    1.1Qt5.9获取所有盘符用函数QFileInfoList QIr::drives(),代码如下: foreach (QFileInfo my_info, QDir::drives()){qDebu ...

  7. python文件拷贝到其他盘符_Python:文件操作技巧(File operation)

    import osimport shutilimport datetime''' 作用:将目录备份到其他路径. 实际效果: 假设给定目录"/media/data/programmer/pro ...

  8. 【SymbolicLink】利用软连接将已安装程序搬迁到其他盘符

    0x00 前言 一个基于 Sybmolic Link 的很有意思的解决方案: mklink /D <产生一个不占空间的等价目录位置> <占空间的目录位置> 可用于将安装好的程序 ...

  9. java 盘符 系统_JAVA小白预备内容

    一. win相关 1. 存储单位 bit(位) 也就是0和1 字节(Byte)1Byte=8bit 千字节(KB)1KB=1024Byte (MB.GB.TB.PB类推). 2. win快捷键 全选C ...

  10. dos 命令——切换盘符与切换工作目录

    1.切换盘符 c:,d: 2.切换工作目录:cd 路径,cd 命令只能在同一盘符下进行工作目录的切换 如题,这是两种命令,不注意的话容易产生误解. 说明:如图操作,达不到想要的结果.原因在这里是想从c ...

最新文章

  1. android锁屏流程_Android开机锁屏流程分析
  2. 1、操作系统基础概念
  3. hadoop api 复制文件_Hadoop发布新组件:分布式对象存储系统Ozone
  4. exit()和_exit()函数
  5. Host SMBus controller not enabled的解决方法
  6. 对‘example_app_new’未定义的引用
  7. python 彻底解读多线程与多进程_python 多进程与多线程浅析
  8. 09-OSPF故障排查总结
  9. 【干货】数字化运营:从理论到实践.pdf(附下载链接)
  10. pytorch 向量转化为one-hot编码
  11. S9300 STP 配置规范
  12. 怎么让字体拥有金属风格?15种不同的金属风格文字效果ps样式不可错过!
  13. Redis数据类型及编码
  14. 关于VLAN-tag
  15. 利用C++,设置输入某年某月某日,判断这一天是这一年的第几天。
  16. 省市名_code_拼音
  17. 开源一个自动录制直播上传投稿的项目
  18. 微信小程序连接华为云ModelArts的方法以及一些小坑(一)
  19. 计算机选择题7,计算机选择题7.doc
  20. js按下回车键调用方法

热门文章

  1. Runloop与autoreleasePool联系
  2. python周报第十九周
  3. net4.0的从客户端中检测到有潜伏危险的 Request.Form
  4. Using neural network to combine measures of word semantic similarity for image annotation
  5. fastjson jsonobject 转bean失败_挂面这么做,零失败,口感还是一顶一的棒
  6. 拓端tecdat|R语言动量交易策略分析调整后的数据
  7. x.view(-1,4)
  8. Android入门笔记08
  9. hibernate教程笔记7
  10. pandas统计样本分位数