C# Path類


一、介紹

  Path類如其名,是專門用來處理和路徑相關的事情的,需要引用System.IO。Path類是一個靜態類,因此它所有的方法及字段都是靜態的,訪問的時候不能用對象去訪問,而是直接通過類名訪問。

二、成員介紹

  先介紹幾個只讀字段:

字段  功能
char DirectorySeparatorChar; 得到目錄分隔符。在windows里,目錄分隔符是'\'。
char AltDirectorySeparatorChar; 得到替換的目錄分隔符。返回結果是'/',意思是用'/'也能進行目錄分隔。
char VolumeSeparatorChar; 得到卷分隔符。在windows中,比如"C:\Users"表示一個路徑,':'就是卷分隔符。
char[] InvalidPathChars; 得到不能在路徑中出現的字符,但這個字段被Obsolete修飾,表示它已經過時,不建議再使用這個字段。下一節介紹兩個方法可以代替這個字段。
char PathSeparator; 得到在環境變量中分隔不同路徑的符號,其值是';'。意思是設置環境變量的時候,用';'分隔不同的路徑。

  方法介紹:

方法 功能
string ChangeExtension(string path, string extension);

改變路徑字符串的擴展名。將path包含的擴展名替換為extension。

比如調用Path.ChangeExtension("xxx.mp4", "avi"),返回的結果就是"xxx.avi"。

string Combine(string path1, string path2);

string Combine(string path1, string path2, string path3);

string Combine(string path1, string path2, string path3, string path4);

string Combine(params string[] paths);

Combine有4種重載方法,它的作用是將傳入的字符串組合成一個路徑。

其實只要有最后一個方法就夠了,我也不知道為什么前面還要寫前面三個方法。

比如調用Path.Combine("Suzkfly", "Music", "XuSong", "2009", "zidingyi");

得到的結果是:"Suzkfly\Music\XuSong\2009\zidingyi"

string GetDirectoryName(string path);

獲得目錄名,比如調用Path.GetDirectoryName(@"C:\Users\Suzkfly\Desktop\test.txt");

得到的結果是:@"C:\Users\Suzkfly\Desktop"。它會把文件名和最后一個'\'去掉。

它的機制就是從字符串的末尾開始,往前刪除字符,直到刪除第一個'\'為止。

也就是說如果傳入的路徑為@"C:\Users\Suzkfly\Desktop\",就會得到@"C:\Users\Suzkfly\Desktop",

如果傳入的路徑為@"C:\Users\Suzkfly\Desktop",就會得到@"C:\Users\Suzkfly"。

string GetExtension(string path);

返回指定路徑字符串的擴展名。比如調用Path.GetExtension(@"C:\Users\Suzkfly\Desktop\test.txt");,

會得到".txt",注意會把'.'也返回。

string GetFileName(string path);

返回指定路徑字符串中的文件名+擴展名。

比如調用Path.GetFileName(@"C:\Users\Suzkfly\Desktop\test.txt");,會得到test.txt。

string GetFileNameWithoutExtension(string path);

返回不具有擴展名的指定路徑字符串的文件名。

比如調用 Path.GetFileNameWithoutExtension(@"C:/Users/Suzkfly/Desktop\test.txt");會得到"test"。

string GetFullPath(string path);

返回指定路徑的完整路徑。這里返回的路徑是基於本程序當前運行時所處路徑。

另外要注意".",表示當前路徑,".."表示上一級路徑,比如我現在運行的這個程序所在的路徑是@"C:\Users\Suzkfly\Desktop",

那么如果我調用Path.GetFullPath("."),就會返回@"C:\Users\Suzkfly\Desktop",

如果調用Path.GetFullPath(@"..\.."),就會返回@"C:\Users"。

char[] GetInvalidFileNameChars(); 獲取不允許出現在文件名中的字符,並將它們放到數組中返回。見第三節。
char[] GetInvalidPathChars(); 獲取不允許出現在路徑名中的字符,並將它們放到數組中返回。見第三節。
string GetPathRoot(string path);

獲取指定路徑的根目錄信息。如果傳入@"C:\Users\Suzkfly\Desktop\test.txt",就會得到@"C:\",

如果傳入的路徑中不包含根目錄就返回空字符串。該方法是進行簡單的字符串處理,意味着,它不能通過"."或".."來得到路徑。

如果要這么做的話,先用GetFullPath得到完整路徑。

string GetRandomFileName(); 返回隨機文件夾名或文件名。就是隨機得到一個名字。
string GetTempFileName();

在磁盤上創建唯一命名的零字節的臨時文件,並返回該文件的完整路徑。調用該方法要注意2點,

第一是調用該方法后會在系統中生成文件,第二是生成的文件不會與已經存在的文件重名。

下一個方法指定臨時文件所在的路徑。

string GetTempPath(); 返回當前用戶的臨時文件夾的路徑。
bool HasExtension(string path); 確定路徑是否包括文件擴展名。
bool IsPathRooted(string path); 確定路徑中是否包含根(盤符)。

三、不允許出現在文件名和路徑名中的字符

  這些字符都是特殊字符,我在Win10中測試,得到的結果如下

  

 

 

   其中黃底的字符,既不能出現在文件名中,也不能出現在路徑名中,綠底的不能出現在文件名中(意味着可以出現在路徑名中?但是文件夾本身也是文件,它是不能包含這些字符的,所以不知道這有什么意義)。

四、測試代碼

using System;
using System.IO;

namespace suzkfly
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("1\t" + Path.DirectorySeparatorChar);
            Console.WriteLine("2\t" + Path.AltDirectorySeparatorChar);
            Console.WriteLine("3\t" + Path.VolumeSeparatorChar);
            Console.WriteLine("4\t" + Path.PathSeparator);

            Console.WriteLine("5\t" + Path.ChangeExtension("xxx.mp4", "avi"));
            Console.WriteLine("6\t" + Path.Combine("Suzkfly", "Music", "XuSong", "2009", "zidingyi"));
            Console.WriteLine("7\t" + Path.GetDirectoryName(@"C:\Users\Suzkfly\Desktop\test.txt"));
            Console.WriteLine("8\t" + Path.GetExtension(@"C:\Users\Suzkfly\Desktop\test.txt"));
            Console.WriteLine("9\t" + Path.GetFileName(@"C:\Users\Suzkfly\Desktop\test.txt"));
            Console.WriteLine("10\t" + Path.GetFileNameWithoutExtension(@"C:/Users/Suzkfly/Desktop\test.txt"));
            Console.WriteLine("11\t" + Path.GetFullPath(@"."));

            char[] invalidfilenamechars = Path.GetInvalidFileNameChars();
            Console.Write("12\t");
            foreach (var i in invalidfilenamechars)
            {
                Console.Write(Convert.ToInt32(i));
                Console.Write(' ');
            }
            Console.WriteLine();

            char[] invalidpathchars = Path.GetInvalidPathChars();
            Console.Write("13\t");
            foreach (char i in invalidpathchars)
            {
                Console.Write(Convert.ToInt32(i));
                Console.Write(' ');
            }
            Console.WriteLine();

            Console.WriteLine("14\t" + Path.GetPathRoot(@"C:\Users\Suzkfly\Desktop\test.txt"));
            Console.WriteLine("15\t" + Path.GetRandomFileName());   //不會創建文件
            Console.WriteLine("16\t" + Path.GetTempFileName());     //會在C:\Users\Suzkfly\AppData\Local\Temp目錄下創建文件
            Console.WriteLine("17\t" + Path.GetTempPath());
            Console.WriteLine("18\t" + Path.HasExtension(@"C:\Users\Suzkfly\Desktop\test"));
            Console.WriteLine("19\t" + Path.IsPathRooted(@"D:\Users\Suzkfly\Desktop\test.txt"));

            Console.ReadKey();
        }
    }
}

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM