服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C# - 浅析C#中文件路径的操作

浅析C#中文件路径的操作

2021-12-14 13:49Brook_icv C#

在.NET类库中,有一个专门的功能类System.IO.Path,对表示文件或在目录路径的string进行操作。本文介绍下利用Path来对文件路径进行的一些经常用操作。感兴趣的朋友可以看下

在程序中对文件操作是非常常见的,而对文件的操作则不可避免的需要文件的路径,并对文件的路径进行一系列的操作,例如:判断已知的路径是一个目录还是一个文件,路劲是一个文件则该文件的名称是什么,文件的扩展名名是什么等等。在C#中并并没有将文件的路径抽象为一个类,用来表示文件路径就是一个普通的字符串。对文件路径的操作例如,要获取文件名称,可以通过截取字符串或者使用正则表达式来取得。

其实,在.NET类库中,有一个专门的功能类System.IO.Path,对表示文件或在目录路径的string进行操作。下面介绍下利用Path来对文件路径进行的一些诶常用操作。

判断给出的路径或者文件名是否合法

Path.GetInvalidFileNameChars() 该方法返回一个char[] 指出不能在文件名中出现的字符。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/// <summary>
  /// 判断文件名是否合法
  /// </summary>
  /// <param name="fileName">文件名</param>
  /// <returns>ture,合法;false,非法</returns>
  public bool validFileName(string fileName)
  {
   if(!string.IsNullOrEmpty(fileName))
   {
    char [] errChars = Path.GetInvalidFileNameChars() ;
    foreach(char ch in errChars)
    {
     if(fileName.Contains(ch.ToString()))
      return false ;
    }
   }
   else
   {
    return false ;
   }
   return true ;
  }

假如文件名称是非法的,可以利用下面的方法,移除非法字符

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/// <summary>
  /// 除掉文件名中的非法字符
  /// </summary>
  /// <param name="fileName"></param>
  /// <returns>合法的文件名</returns>
  public string fixedFileName(string fileName)
  {
   char[] errChars = Path.GetInvalidFileNameChars();
   StringBuilder fileNameBuilder = new StringBuilder(fileName) ;
   foreach(char ch in errChars)
   {
    fileNameBuilder.Replace(ch.ToString(),string.Empty);
   }
   return fileNameBuilder.ToString();
  }

同理使用Path.GetInvalidPathChars()来获取不能在目录路径中出现的字符,来判断给出的目录路径是否合法,并且对非法的目录路径进行修改。

判断给出的路径是目录路径还是文件路径

如果能够确定给出的路径是已经存在的,那么可以使用Directory.Exists()和File.Exists()来判断路径是目录还是文件。不能确定给定的路径存在,可以使用Path.GetFileName()获取路径中的文件名,如能取到文件名显然路径是一个文件路径,如不能则是路径。说明,目录路径的最后一个字符应该是以'\'来结束。

合并路径

有些路径的不同部分是从不同的地方取得,这是需要将这些部分进行组合,形成一个完整的路径。在组合的过程中不可避免的要涉及到对”\”的处理,这时可以使用Path.Combine()把路径的不同部分组合到一起。Path.Combine()有多种形式的重载,满足不同的需求。需要说明的是,在用Path.Combine()不接受不合法的文件名或者路径名,并且在合并时,如果某一个部分是从绝对路径开始的,则合并操作重置为从该绝对路径开始,舍弃前面的已经合并的路径。例如:

?
1
2
3
4
5
string[] paths = {@"d:\archives", "2001", "e:\\", "images"};
   string fullPath = Path.Combine(paths);
   //fullPath 为 e:\images
   Console.WriteLine(fullPath);
fullPath为e:\images

获取路径的特定部分,如:文件名,扩展名,文件目录等

?
1
2
3
4
5
Path.GetFileName(path);//获取文件名
Path.GetFileNameWithoutExtension(path); //获取文件名,不带扩展名
Path.GetExtension(path) ; //获取文件扩展名
Path.GetDirectoryName(path) ; //获取文件目录
Path.GetPathRoot(path) ;//获取根目录信息

更具体的可以参看MSDN  http://msdn.microsoft.com/zh-cn/library/system.io.path_methods.aspx

Path其它的一些功能函数

  • Path.GetRandomFileName() 获取一个随机的文件名或者目录名
  • Path.GetTempFileName() 创建磁盘上唯一命名的零字节的一个临时文件并返回该文件的完整路径
  • Path.GetTempPath() 获取当前用户的临时目录路径
  • Path.HasExtension() 确定路径是否包含文件扩展名

获取和应用程序相关的路径

  • System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName 获取模块的完整路径,包括文件名。
  • System.Environment.CurrentDirectory 获取或设置应用程序当前工作目录的完全限定路径
  • System.IO.Directory.GetCurrentDirectory() 获取或设置应用程序的当前工作目录,不一定是应用程序的启动目录,是应用程序最后一次操作过的目录。

环境变量相关

使用System.Environment.GetEnvironmentVariable()能够获取和环境变量相关的文件路径,例如:

  • System.Environment.GetEnvironmentVariable("windir") 获取操作系统所在的目录
  • System.Environment.GetEnvironmentVariable("INCLUDE") 获取头文件所在的目录
  • System.Environment.GetEnvironmentVariable("TMP") 获取临时目录
  • System.Environment.GetEnvironmentVariable("Path") 获取Path环境变量所包含的文件目录

自然,使用System.Environment.SetEnvironmentVariable() 能够设置环境变量

原文链接:http://www.cnblogs.com/wangguchangqing/archive/2013/04/02/2992660.html

延伸 · 阅读

精彩推荐
  • C#三十分钟快速掌握C# 6.0知识点

    三十分钟快速掌握C# 6.0知识点

    这篇文章主要介绍了C# 6.0的相关知识点,文中介绍的非常详细,通过这篇文字可以让大家在三十分钟内快速的掌握C# 6.0,需要的朋友可以参考借鉴,下面来...

    雨夜潇湘8272021-12-28
  • C#利用C#实现网络爬虫

    利用C#实现网络爬虫

    这篇文章主要介绍了利用C#实现网络爬虫,完整的介绍了C#实现网络爬虫详细过程,感兴趣的小伙伴们可以参考一下...

    C#教程网11852021-11-16
  • C#C#微信公众号与订阅号接口开发示例代码

    C#微信公众号与订阅号接口开发示例代码

    这篇文章主要介绍了C#微信公众号与订阅号接口开发示例代码,结合实例形式简单分析了C#针对微信接口的调用与处理技巧,需要的朋友可以参考下...

    smartsmile20127762021-11-25
  • C#C#设计模式之Strategy策略模式解决007大破密码危机问题示例

    C#设计模式之Strategy策略模式解决007大破密码危机问题示例

    这篇文章主要介绍了C#设计模式之Strategy策略模式解决007大破密码危机问题,简单描述了策略模式的定义并结合加密解密算法实例分析了C#策略模式的具体使用...

    GhostRider10972022-01-21
  • C#SQLite在C#中的安装与操作技巧

    SQLite在C#中的安装与操作技巧

    SQLite,是一款轻型的数据库,用于本地的数据储存。其优点有很多,下面通过本文给大家介绍SQLite在C#中的安装与操作技巧,感兴趣的的朋友参考下吧...

    蓝曈魅11162022-01-20
  • C#VS2012 程序打包部署图文详解

    VS2012 程序打包部署图文详解

    VS2012虽然没有集成打包工具,但它为我们提供了下载的端口,需要我们手动安装一个插件InstallShield。网上有很多第三方的打包工具,但为什么偏要使用微软...

    张信秀7712021-12-15
  • C#深入理解C#的数组

    深入理解C#的数组

    本篇文章主要介绍了C#的数组,数组是一种数据结构,详细的介绍了数组的声明和访问等,有兴趣的可以了解一下。...

    佳园9492021-12-10
  • C#如何使用C#将Tensorflow训练的.pb文件用在生产环境详解

    如何使用C#将Tensorflow训练的.pb文件用在生产环境详解

    这篇文章主要给大家介绍了关于如何使用C#将Tensorflow训练的.pb文件用在生产环境的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴...

    bbird201811792022-03-05