欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-03-26 08:36:43
在程序中对文件操作是非常常见的,而对文件的操作则不可避免的需要文件的路径,并对文件的路径进行一系列的操作,例如:判断已知的路径是一个目录还是一个文件,路劲是一个文件则该文件...

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

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

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

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

/// <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 ;
  }

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

/// <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()不接受不合法的文件名或者路径名,并且在合并时,如果某一个部分是从绝对路径开始的,则合并操作重置为从该绝对路径开始,舍弃前面的已经合并的路径。例如:

string[] paths = {@"d:\archives", "2001", "e:\\", "images"};
   string fullpath = path.combine(paths);
   //fullpath 为 e:\images
   console.writeline(fullpath);
fullpath为e:\images

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

   path.getfilename(path);//获取文件名 
   path.getfilenamewithoutextension(path); //获取文件名,不带扩展名 
   path.getextension(path) ; //获取文件扩展名 
   path.getdirectoryname(path) ; //获取文件目录 
   path.getpathroot(path) ;//获取根目录信息

更具体的可以参看msdn 

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() 能够设置环境变量