C#設置文件保存路徑

System.Environment.CurrentDirectory
System.IO.Directory.GetCurrentDirectory()
這兩個方法獲得的路徑是一樣的,獲得的是當前路徑,這個路徑不一定是程序所在的路徑。任何會改變當前路徑的方法都會改變它,例如:OpenFileDialog每換一次目錄就會改變它。因此,用這2個方法獲取程序路徑並不可靠。

文件操作所使用的路徑就是這個路徑,而真正需要用到的路徑是根據程序啓動位置的變化而變化的.所以應該獲取的是: System.Windows.Forms.Application.StartupPath;獲取啓動應用程序的可執行文件的路徑,不包括可執行文件的名稱.然後在根據這個路徑做文件操作,就沒問題了.
以下是轉載的原文:

C#獲取程序路徑的方法中需要注意的地方
版本1
獲取運行程序路徑的方法主要有以下7種:

System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName
他獲取的是Module的文件名,如果在VS2008的調試環境中,獲取的是 [程序名].vshost.exe的完整文件名。
System.Environment.CurrentDirectory
System.IO.Directory.GetCurrentDirectory()
這兩個方法獲得的路徑是一樣的,獲得的是當前路徑,這個路徑不一定是程序所在的路徑。任何會改變當前路徑的方法都會改變它,例如:OpenFileDialog每換一次目錄就會改變它。因此,用這2個方法獲取程序路徑並不可靠。
System.AppDomain.CurrentDomain.BaseDirectory
System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase
這兩個方法是可靠的獲取程序路徑的方法。返回的路徑最末以"\"結尾。可以方便的在後面加入任何Path。當然就算沒有也可以用Path.Combine來合併路徑以獲得想要的路徑。
System.Windows.Forms.Application.StartupPath
這個方法也是可靠的獲取程序路徑的方法。不過返回的路徑最末並沒有"\"結尾。另外因爲是Forms命名空間的。因此如果使用WPF還是不用的好。
System.Windows.Forms.Application.ExecutablePath
這個方法獲取的是執行程序的完整文件名。是最可靠的方式,只需要去掉程序文件名就可以獲得路徑。
版本2:

//獲取新的 Process 組件並將其與當前活動的進程關聯的主模塊的完整路徑,包含文件名(進程名)。
string str = System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName;
result: X:\xxx\xxx\xxx.exe (.exe文件所在的目錄+.exe文件名)
//獲取和設置當前目錄(即該進程從中啓動的目錄)的完全限定路徑。
string str = System.Environment.CurrentDirectory;
result: X:\xxx\xxx (.exe文件所在的目錄)

//獲取當前 Thread 的當前應用程序域的基目錄,它由程序集衝突解決程序用來探測程序集。
string str = System.AppDomain.CurrentDomain.BaseDirectory;
result: X:\xxx\xxx\ (.exe文件所在的目錄+"\")

//獲取和設置包含該應用程序的目錄的名稱。
string str = System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase;
result: X:\xxx\xxx\ (.exe文件所在的目錄+"\")

//獲取啓動了應用程序的可執行文件的路徑,不包括可執行文件的名稱。
string str = System.Windows.Forms.Application.StartupPath;
result: X:\xxx\xxx (.exe文件所在的目錄)

//獲取啓動了應用程序的可執行文件的路徑,包括可執行文件的名稱。
string str = System.Windows.Forms.Application.ExecutablePath;
result: X:\xxx\xxx\xxx.exe (.exe文件所在的目錄+.exe文件名)

//獲取應用程序的當前工作目錄(不可靠)。
string str = System.IO.Directory.GetCurrentDirectory();
result: X:\xxx\xxx (.exe文件所在的目錄)
-------------------------------------------
C#獲取本執行程序所在的當前路徑
1.獲取和設置當前目錄的完全限定路徑。
string str = System.Environment.CurrentDirectory;
Result: C:\xxx\xxx

2.獲取啓動了應用程序的可執行文件的路徑,不包括可執行文件的名稱。
string str = System.Windows.Forms.Application.StartupPath;
Result: C:\xxx\xxx

3.獲取新的 Process 組件並將其與當前活動的進程關聯的主模塊的完整路徑,包含文件名。
string str = System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName;
Result: C:\xxx\xxx\xxx.exe

4.獲取當前 Thread 的當前應用程序域的基目錄,它由程序集衝突解決程序用來探測程序集。
string str = System.AppDomain.CurrentDomain.BaseDirectory;
Result: C:\xxx\xxx\

5.獲取應用程序的當前工作目錄。
string str = System.IO.Directory.GetCurrentDirectory();
Result: C:\xxx\xxx

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章