c#基础语言编程-Path和Directory
引言
在程序常会对文件操作,在对文件操作中需要对文件路径的进行定位,在.Net中针对寻找文件提供两个静态类以供调用,Path和Directory。
Path类
来自命名空间SYstem.IO,Path类提供的方法是对党获取文件路径后处理方法,更应该算是对字符串操作。
例子代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace Example
{
class Program
{
static void Main(string[] args)
{
// Path类就是对字符串的操作,与实际的文件没有任何关系
string path = @"C:\Documents and Settings\Administrator\My Documents\exercises\ITCAST-102\ipmsg.exe";
//获取文件名,带后缀
string filename = Path.GetFileName(path);
Console.WriteLine(filename);
//获取文件名不带后缀
string fname = Path.GetFileNameWithoutExtension(path);
Console.WriteLine(fname);
//只获取文件后缀
string ext = Path.GetExtension(path);
Console.WriteLine(ext);
//截取文件的路径部分,不带文件名、
string filePath = Path.GetDirectoryName(path);
Console.WriteLine(filePath);
//只是把字符串中的文件的路径改了,与磁盘上的文件无关。
string newpath = Path.ChangeExtension(path, ".txt");
Console.WriteLine(newpath);
string s1 = @"c:\abc\xyz\aa\";
string s2 = "abc.avi";
//连接两个路径。
string full = Path.Combine(s1, s2); //s1 + s2;
Console.WriteLine(full);
Console.ReadKey();
}
}
}
结果为:
这个类常用的就是Path.Combine,Path.GetFileName,Path.GetDirectoryName,Path.GetFileNameWithoutExtension。
当然能在应用中也能获取临时文件的路径。这个类的使用常常伴随Directory类操作。
Directory类
Path是对文件的路径进行操作,Net提供了Directory类则是对文件的目录进行操作,能够对文件目录进行操作,如:获取文件目录下所有子文件、子文件夹、指定的文件夹等等。
常用的就是:
Directory.GetDirectories():读取指定目录下的所有子目录
Directory.GetFiles(): 获取指定目录下的所有的子文件
Directory.Exists():验证指定的文件是否存在
Directory.CreateDirectory():创建指定目录
string path = @"C:\DRIVER";
//读取指定目录下的所有子目录(文件夹)
//string[] dirs = Directory.GetDirectories(path);
//获取路径下含有"a"的文件夹,当然也可设置为"*.txt".
string[] dirs = Directory.GetDirectories(path,"*a*",SearchOption.AllDirectories);
//在获取目录基础上可以递归实现读取子目录下的子目录。
foreach (var item in dirs)
{
Console.WriteLine(item);
}
Console.WriteLine("=============================");
//获取指定目录下的所有的子文件
string[] files = Directory.GetFiles(path,"*b*",SearchOption.AllDirectories);
foreach (string item in files)
{
Console.WriteLine(item);
}
Console.ReadLine();
获取路径
前面两者提供了对文件目录和文件路径进行操作,那如何获取路径?
1、通过对话框获取工作路径
2、通过函数获取工作路径。
- 通过对话框获取工作路径
OpenFileDialog filename = new OpenFileDialog();
filename.Filter ="文本文件(*.txt)|*.txt|所有文件 (*.*)|*.*";
if (filename.ShowDialog() == DialogResult.OK)
{
textBox1.Text = filename.FileName.ToString();
}
- 通过函数获取工作路径
1、取得控制台应用程序的根目录方法
方法1、Environment.CurrentDirectory 取得或设置当前工作目录的完整限定路径
方法2、AppDomain.CurrentDomain.BaseDirectory 获取基目录,它由程序集冲突解决程序用来探测程序集
2、取得Web应用程序的根目录方法
方法1、HttpRuntime.AppDomainAppPath.ToString();//获取承载在当前应用程序域中的应用程序的应用程序目录的物理驱动器路径。用于App_Data中获取
方法2、Server.MapPath(“”) 或者 Server.MapPath(“~/”);//返回与Web服务器上的指定的虚拟路径相对的物理文件路径
方法3、Request.ApplicationPath;//获取服务器上ASP.NET应用程序的虚拟应用程序根目录
3、取得WinForm应用程序的根目录方法
1、Environment.CurrentDirectory.ToString();//获取或设置当前工作目录的完全限定路径
2、Application.StartupPath.ToString();//获取启动了应用程序的可执行文件的路径,不包括可执行文件的名称
3、Directory.GetCurrentDirectory();//获取应用程序的当前工作目录
4、AppDomain.CurrentDomain.BaseDirectory;//获取基目录,它由程序集冲突解决程序用来探测程序集
5、AppDomain.CurrentDomain.SetupInformation.ApplicationBase;//获取或设置包含该应用程序的目录的名称
其中:以下两个方法可以获取执行文件名称
1、Process.GetCurrentProcess().MainModule.FileName;//可获得当前执行的exe的文件名。
2、Application.ExecutablePath;//获取启动了应用程序的可执行文件的路径,包括可执行文件的名称
3、System.IO.Path类中有一些获取路径的方法,可以在控制台程序或者WinForm中根据相对路径来获取绝对路径
上面加粗就是常用获取工作路径的方法,工作路径就是exe或者dll的生成目录,来自属性>生成>输出目录的设置。
例如:设置输出目录为
代码为:
//获取和设置当前目录的完全限定目录(根据输出目录基础上获取的)
string str = System.Environment.CurrentDirectory;
//2.获取启动了应用程序的可执行文件的路径,不包括可执行文件的名称。
//string str = System.Windows.Forms.Application.StartupPath;
//Result: C:\xxx\xxx
//3.获取新的 Process 组件并将其与当前活动的进程关联的主模块的完整路径,包含文件名。
string str1 = System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName;
//4.获取当前 Thread 的当前应用程序域的基目录,它由程序集冲突解决程序用来探测程序集。
string str4 = System.AppDomain.CurrentDomain.BaseDirectory;
//5.获取应用程序的当前工作目录。
string str5 = System.IO.Directory.GetCurrentDirectory();
//6.获取和设置包含该应用程序的目录的名称。
string str6 = System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase;
//7.获取当前进程的完整路径,包含文件名。
//string str7 = this.GetType().Assembly.Location;
//Result: C:\xxx\xxx\xxx.exe
//8.获取启动了应用程序的可执行文件的路径,包括可执行文件的名称。
//string str8 = System.Windows.Forms.Application.ExecutablePath;
Console.WriteLine(str);
Console.WriteLine(str1);
Console.WriteLine(str4);
Console.WriteLine(str5);
Console.WriteLine(str6);
// Console.WriteLine(str7);
Console.ReadKey();
c#基础语言编程-Path和Directory的更多相关文章
- c#基础语言编程-程序集和反射
程序集 什么是程序集? 1.程序集(assembly)是一个及一个以上托管模块,以及一些资源文件的逻辑组合. 2.程序集是组件复用,以及实施安全策略和版本策略的最小单位. 3.程序集是包含一个或者多个 ...
- c#基础语言编程-正则表达式应用
引言 在不同语言中虽正则表达式一样,但应用函数还是有所区别,在c#语言中使用Regex. 可以通过以下两种方式之一使用正则表达式引擎: 通过调用 Regex 类的静态方法. 方法参数包含输入字符串和正 ...
- c#基础语言编程-正则表达式基础
引言 正则表达式是一种用高度抽象的字符串来描述字符串特征,进而实现对字符串的匹配.提取.替换等等.正则表达式(以下简称正则,Regex)通常不独立存在,各种编程语言和工具作为宿主语言提供对正则的支持, ...
- c#基础语言编程-文件流操作
引言 在System.IO 命名空间下提供了一系列的类,我们可以通过相应的类进行文件.目录.数据流的操作. 1.File类:提供用于创建.复制.删除.移动和打开文件的静态方法.File类 2.File ...
- c#基础语言编程-编码
字符编码是计算机技术的基础理论,其字符编码有ASCII码.UTF-8.还有就是GB2312,当然这是在中国常用的. 1.ASCII码 在计算机内部所有的信息都是以二进制字符进行存储.用每个二进制位中的 ...
- c#基础语言编程-装箱和拆箱
引言 为什么有装箱和拆箱,两者起到什么作用?NET的所有类型都是由基类System.Object继承过来的,包括最常用的基础类型:int, byte, short,bool等等,就是说所有的事物都是对 ...
- c#基础语言编程-多态
语言中的多态性是为了使程序有扩展性,为实现多态性,在程序中体现为接口.抽象类.父类.具体类. 接口就是一种规范,解决了多重继承的问题,类似一种规范,告诉我要做什么,具有什么能力,在接口中定义写行为属性 ...
- c#基础语言编程-序列化
引言 程序员在编写应用程序的时候往往要将程序的某些数据存储在内存中,然后将其写入某个文件或是将它传输到网络中的另一台计算机上以实现通讯.这个将程序数据转化成能被存储并传输的格式的过程被称为" ...
- c#基础语言编程-集合
引言 在c#常用的集合分为非泛型集合和泛型集合. 非泛型集合的类和接口位于System.Collections命名空间.这些接口和类定义各种对象(如列表.队列.位数组.哈希表和字典)的集合. 泛型集合 ...
随机推荐
- 分享一个自己写的基于TP的关系模型(三)
这段时间对模型做了升级和优化,并将版本更新到TP3.2. 下载 下载后请将目录放置TP的Library目录下 1.数据节点优化,原来的节点为模型的名称或者表名,现在更新为定义关系的方法名 public ...
- 『重构--改善既有代码的设计』读书笔记----Change Value to Reference
有时候你会认为某个对象应该是去全局唯一的,这就是引用(Reference)的概念.它代表当你在某个地点对他进行修改之后,那么所有共享他的对象都应该在再次访问他的时候得到相应的修改.而不会像值对象(Va ...
- Java学习----Math函数
public class TestMath { public static void main(String[] args) { System.out.println(Math.E); System. ...
- Android2.2 API —— ImageView
注意 请查看本文后期更新完整版: http://www.cnblogs.com/over140/archive/2011/06/08/2075054.html 来源: 农民伯伯: http://www ...
- QFTP走了以后QNetworkAccessManager出现了
QNetworkAccessManager Class Header: #include <QNetworkAccessManager>qmake: QT += networ ...
- bcov进行覆盖率统计
kcov是在bcov基础上进行的,bcov已经很久没有维护了: 首先需要下载依赖库libdwraft,然后在configure时候进行指定: ./configure --with-libdwarf=/ ...
- ServletContext全局变量初始化
Java部分 package com.servlet; import java.io.IOException; import java.io.PrintWriter; import javax.ser ...
- [BZOJ 3198] [Sdoi2013] spring 【容斥 + Hash】
题目链接:BZOJ - 3198 题目分析 题目要求求出有多少对泉有恰好 k 个值相等. 我们用容斥来做. 枚举 2^6 种状态,某一位是 1 表示这一位相同,那么假设 1 的个数为 x . 答案就是 ...
- [CF Round #294 div2] E. A and B and Lecture Rooms 【树上倍增】
题目链接:E. A and B and Lecture Rooms 题目大意 给定一颗节点数10^5的树,有10^5个询问,每次询问树上到xi, yi这两个点距离相等的点有多少个. 题目分析 若 x= ...
- 用POLL的方式,没有跑出结果来,立此存照
咦,这些内容,和我以前看内核时的东东,对应起来了.. SELECT,POLL,EPOLL,非阻塞,异步之类的... 但我没有调出来.回家有空了可以看看,不用再敲打代码啦... #!/usr/bin/e ...