浅析C#中文件路径的操作
作者:Brook_icv 发布时间:2023-11-09 16:24:30
在程序中对文件操作是非常常见的,而对文件的操作则不可避免的需要文件的路径,并对文件的路径进行一系列的操作,例如:判断已知的路径是一个目录还是一个文件,路劲是一个文件则该文件的名称是什么,文件的扩展名名是什么等等。在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 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#实现,分享给大家供大家参考,具体内容如下using System;using System.Co
- 本文这个实例通过前面学过的Paint、Canvas等2D绘画技术来实现一个简单的Android的绘图板。具体实现代码:创建一个名为DrawV
- 帮我们实现各种类型的复杂手势操作。其实例通过静态工厂创建ViewDragHelper一般用在一个自定义ViewGroup的内部。初始化操作
- 又遇到了回调函数,这次打算写下来分享一下。所谓回调函数,或者在面向对象语言里叫回调方法,简单点讲,就是回头在某个时间(事件发生)被调用的函数
- 本文实例讲述了Android简单获取经纬度的方法。分享给大家供大家参考,具体如下:public void getLoc() {
- 一、常见的锁策略1.1 乐观锁乐观锁:乐观锁假设认为数据一般情况下不会产生并发冲突,所以在数据进行提交更新的时候,才会正 式对数据是否产生并
- FTP(File Transfer Protocol)就是文件传输协议。通过FTP客户端从远程FTP服务器上拷贝文件到本地计算机称为下载,将
- 本Demo使用三个类一个Test类一个自定义的Stack类一个自定义的Queue类可以实现的功能:1.对于一个写在文本文件中的迷宫,能够将其
- 一个简单的微服务架构图本文设计的 Spring Cloud 版本以及用到的 Spring Cloud 组件Spring Cloud Hoxt
- 系统的基本架构 我们假设一个系统System包含Service客户服务中心、Shop网上购物中心和Office网上办公中心三个独立的网站。
- .NET中提供了读写Cookie的多种方法,Request.Cookies 是客户端通过 Cookie 标头形式由客户端传输到服务器的 Co
- Android中的Intent是一个非常重要的类,如果对Intent不是特别了解,可以参见《详解Android中Intent的使用方法》。如
- 本文实例讲述了Android 开发使用PopupWindow实现加载等待界面功能。分享给大家供大家参考,具体如下:实现加载等待界面我用了两种
- 前置导入什么是多环境?其实就是说你的电脑上写的程序最终要放到别人的服务器上去运行。每个计算机环境不一样,这就是多环境。常见的多环境开发主要兼
- 1. private void Form1_Load(object &
- 1 二叉排序树的概述本文没有介绍一些基础知识。对于常见查找算法,比如顺序查找、二分查找、插入查找、斐波那契查找还不清楚的,可以看这篇文章:常
- 现在很多的网站都提供有用户注册功能, 通常我们注册成功之后就会收到一封来自注册网站的邮件。邮件里面的内容可能包含了我们的注册的用户名和密码以
- 导入依赖(pom.xml) <!--整合Shiro安全框架--> <dependency>  
- 本文实例为大家分享了AndroidStudio实现能在图片上涂鸦的具体代码,供大家参考,具体内容如下一、内容:设计一个能在图片上涂鸦的程序二
- 目录批量更新同一张表的数据更新多条数据,每条数据都不一样java中for循环实现方式一条SQL,服务端逐条更新mybatis实现方式使用Fl