[C#] 取得檔案路徑的名稱、路徑、副檔名與目前程式程式位置心得筆記

取得檔案路徑的名稱、路徑、副檔名與目前程式程式位置心得筆記

程式完整檔案路徑

方法一 - 目前進程的完整路徑,包含檔案名

string sFile = this.GetType().Assembly.Location;
Console.WriteLine(sFile);
// 輸出:X:\XXX\XXX\XXX.exe

方法二 - 目前執行 exe 的檔案名

string sFile = System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName;
Console.WriteLine(sFile);
// 輸出:X:\XXX\XXX\XXX.exe

方法三 - 啟動應用程式的可執行檔案的路徑,含可執行檔名

string sFile = System.Windows.Forms.Application.ExecutablePath;
Console.WriteLine(sFile);
// 輸出:X:\XXX\XXX\XXX.exe

程式所在目錄

方法一 - 應用程式的目前工作目錄

string sDir = System.IO.Directory.GetCurrentDirectory();
Console.WriteLine(sDir);
// 輸出:X:\XXX\XXX

方法二- 當前目錄的完全限定路徑(即該進程的啟動目錄)

string sDir = System.Environment.CurrentDirectory;
Console.WriteLine(sDir);
// 輸出:X:\XXX\XXX

方法三- 啟動應用程式的可執行檔案的路徑,不含可執行檔名

string sDir = System.Windows.Forms.Application.StartupPath;
Console.WriteLine(sDir);
// 輸出:X:\XXX\XXX

方法四- 當前 Thread 的應用程式的根目錄(包含目錄最下層的 \ 字元)

string sDir = System.AppDomain.CurrentDomain.BaseDirectory;
Console.WriteLine(sDir);
// 輸出:X:\XXX\XXX\

方法五- 包含該應用程式的目錄的名稱(包含目錄最下層的 \ 字元)

string sDir = System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase;
Console.WriteLine(sDir);
// 輸出:X:\XXX\XXX\

指定檔案名稱。路徑操作

using System.IO;  // 以下方法都在這個命名空間內

string sFile = @"C:\Sample\Test\File.bin";

// 要確定有這檔案存在,接下來的方法才能如預期地操作
if (File.Exists(sFile))
{
    string sTmp;
    
    // 取得檔名(不包含附檔名)
    sTmp = Path.GetFileNameWithoutExtension(sFile);
    Console.WriteLine(sTmp);
    // 輸出:File
    
    // 取得副檔名
    sTmp = Path.GetExtension(sFile);
    Console.WriteLine(sTmp);
    // 輸出:bin
    
    // 取得檔案路徑
    sTmp = Path.GetDirectoryName(sFile);
    Console.WriteLine(sTmp);
    // 輸出:C:\Sample\Test
    sTmp = Path.GetDirectoryName("C:\XXX");
    Console.WriteLine(sTmp);
    // 輸出:C:\
    sTmp = Path.GetDirectoryName("C:\");
    Console.WriteLine(sTmp);
    // 輸出:
    //      ^空字元
    
    // 取得根目錄
    sTmp = Path.GetPathRoot(sFile);
    Console.WriteLine(sTmp);
    // 輸出:C:\
    sTmp = Path.GetPathRoot("\Data\");
    Console.WriteLine(sTmp);
    // 輸出:\
    sTmp = Path.GetPathRoot("Data.ext");
    Console.WriteLine(sTmp);
    // 輸出:
    //      ^空字元
    
    // 取得完整檔案路徑
    sTmp = Path.GetFullPath(sFile);
    Console.WriteLine(sTmp);
    // 輸出:C:\Sample\Test\File.bin
}

當組合數個檔案名稱路徑的字串時,要注意 \ 這個字元是否存在,不然很容易出錯!

建議當要組合多個檔案名稱路徑還是參考使用Path.Combine這個方法比較保險!