引言

在程序常会对文件操作,在对文件操作中需要对文件路径的进行定位,在.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的更多相关文章

  1. c#基础语言编程-程序集和反射

    程序集 什么是程序集? 1.程序集(assembly)是一个及一个以上托管模块,以及一些资源文件的逻辑组合. 2.程序集是组件复用,以及实施安全策略和版本策略的最小单位. 3.程序集是包含一个或者多个 ...

  2. c#基础语言编程-正则表达式应用

    引言 在不同语言中虽正则表达式一样,但应用函数还是有所区别,在c#语言中使用Regex. 可以通过以下两种方式之一使用正则表达式引擎: 通过调用 Regex 类的静态方法. 方法参数包含输入字符串和正 ...

  3. c#基础语言编程-正则表达式基础

    引言 正则表达式是一种用高度抽象的字符串来描述字符串特征,进而实现对字符串的匹配.提取.替换等等.正则表达式(以下简称正则,Regex)通常不独立存在,各种编程语言和工具作为宿主语言提供对正则的支持, ...

  4. c#基础语言编程-文件流操作

    引言 在System.IO 命名空间下提供了一系列的类,我们可以通过相应的类进行文件.目录.数据流的操作. 1.File类:提供用于创建.复制.删除.移动和打开文件的静态方法.File类 2.File ...

  5. c#基础语言编程-编码

    字符编码是计算机技术的基础理论,其字符编码有ASCII码.UTF-8.还有就是GB2312,当然这是在中国常用的. 1.ASCII码 在计算机内部所有的信息都是以二进制字符进行存储.用每个二进制位中的 ...

  6. c#基础语言编程-装箱和拆箱

    引言 为什么有装箱和拆箱,两者起到什么作用?NET的所有类型都是由基类System.Object继承过来的,包括最常用的基础类型:int, byte, short,bool等等,就是说所有的事物都是对 ...

  7. c#基础语言编程-多态

    语言中的多态性是为了使程序有扩展性,为实现多态性,在程序中体现为接口.抽象类.父类.具体类. 接口就是一种规范,解决了多重继承的问题,类似一种规范,告诉我要做什么,具有什么能力,在接口中定义写行为属性 ...

  8. c#基础语言编程-序列化

    引言 程序员在编写应用程序的时候往往要将程序的某些数据存储在内存中,然后将其写入某个文件或是将它传输到网络中的另一台计算机上以实现通讯.这个将程序数据转化成能被存储并传输的格式的过程被称为" ...

  9. c#基础语言编程-集合

    引言 在c#常用的集合分为非泛型集合和泛型集合. 非泛型集合的类和接口位于System.Collections命名空间.这些接口和类定义各种对象(如列表.队列.位数组.哈希表和字典)的集合. 泛型集合 ...

随机推荐

  1. Constructor and destructor -- Initialization & Cleanup in C++

    Why need initialization and cleanup? A large segment of C bugs occur when the programmer forgets to ...

  2. 从内部剖析C#集合之HashTable

    计划写几篇文章专门介绍HashTable,Dictionary,HashSet,SortedList,List 等集合对象,从内部剖析原理,以便在实际应用中有针对性的选择使用. 这篇文章先介绍Hash ...

  3. WebMethod 属性

    WebMethod有以下几种属性: BufferResponse CacheDuration Description EnableSession MessageName TransactionOpti ...

  4. curl批处理从官方demo封装

    官方demo // 创建一对cURL资源 $ch1 = curl_init(); $ch2 = curl_init(); // 设置URL和相应的选项 curl_setopt($ch1, CURLOP ...

  5. 我的接口框架---框架函数文件common.php

    <?php defined('JDHU') OR die('no allow access'); /** * 加载配置文件 */ function &get_config($replac ...

  6. Java 不定长度参数

    在调用某个方法时,若是方法的参数个数事先无法确定该如何处理?例如System.out.printf()方法中并没有办法事先决定要给的参数个数,像是: ? 1 2 3 System.out.printf ...

  7. __unset()魔术方法 删除类内私有属性

    __unset()魔术方法 删除私有属性 unset()对共有属性进行删除 可通过__unset()魔术方法对私有属性进行操作 当在类外部执行unset()函数时,自动执行类内__unset()魔术方 ...

  8. 2的N次方

    /**编程精确计算2的N次方.(N是介于100和1000之间的整数)*//*问题代码:#include<stdio.h>#include<math.h>int main(){ ...

  9. 练习2 J题 - 多项式求和

      Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u   Description 多项式 ...

  10. 数据结构练习 00-自测5. Shuffling Machine (20)

    Shuffling is a procedure used to randomize a deck of playing cards. Because standard shuffling techn ...