程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 關於C#中程序當前目錄的小隨筆

關於C#中程序當前目錄的小隨筆

編輯:C#入門知識

【題外話】
最近做了個.NET 4.0平台的程序,一直在Win7/8上運行的好好的,結果用戶說XP上說有問題,於是我就改了下程序,增加了記log的功能然後發給用戶。log的目錄是根據Environment.CurrentDirectory得出的。結果要求用戶運行完程序以後將log發回給我,但用戶始終找不到這個文件。

【文章索引】

【1、奇怪的目錄】

                    
          }

曾經從網上看到過一些介紹.NET中獲取當前目錄方法的文章,其中關於IO.Directory.GetCurrentDirectory()的描述基本上都是獲取程序的工作目錄,或者有的文章也說不清除獲取的是什麼。但對於Environment.CurrentDirectory獲取的內容,基本上都說是程序當前目錄,或者直接照搬MSDN上的說明。

其實這倆獲取到的是一樣的內容。而IO.Directory.GetCurrentDirectory()的代碼則如下所示:

          StringBuilder sb =  StringBuilder(Path.MAX_PATH +       (Win32Native.GetCurrentDirectory(sb.Capacity, sb) ==       String currentDirectory =      (currentDirectory.IndexOf() >=          
      String demandPath = GetDemandDir(currentDirectory,       FileIOPermission( FileIOPermissionAccess.PathDiscovery,  String[] { demandPath }, ,       }

 [DllImport(KERNEL32, SetLastError=, CharSet=CharSet.Auto, BestFitMapping=      GetCurrentDirectory( nBufferLength, StringBuilder lpBuffer);

【2、奇怪的RestoreDirectory】

   Form1_Load(      .Text = String.Format( 
     .chkRestoreDir.Checked =   
   btnTest_Click(      StringBuilder sb =  
     sb.AppendLine(String.Format(     sb.AppendLine(String.Format( 
      sb.AppendLine(String.Format(     sb.AppendLine(String.Format( 
     .txtInfo.Text =  
   chkRestoreDir_CheckedChanged(      .dlgOpen.RestoreDirectory =  }

 

【3、系統的問題】

 CString info, path, T(), F( GetCurrentDirectory(, path.GetBuffer(  info =  info = info + info = info +  + (chkRestoreDir.GetCheck() == TRUE ? 
 CFileDialog * dlgOpen =  CFileDialog(TRUE, (LPCTSTR), (LPCTSTR), OFN_HIDEREADONLY | OFN_PATHMUSTEXIST | (chkRestoreDir.GetCheck() ? OFN_NOCHANGEDIR : ), (LPCTSTR)   (dlgOpen->DoModal() ==       fileName = dlgOpen->     info = info +  +  
  
 GetCurrentDirectory(, path.GetBuffer(  
 info = info +  + InfoText = UpdateData();

 

【4、其他獲取方式

                  (startupPath ==              StringBuilder sb =               startupPath =          Debug.WriteLineIf(IntSecurity.SecurityDemand.TraceVerbose,  + startupPath +                     }

而其中的GetModuleFileName其實也是調用的WIN32 API,具體如下:

 [DllImport(ExternDll.Kernel32, CharSet=     GetModuleFileName(HandleRef hModule, StringBuilder buffer,  length); 

而GetModuleFileName其實是獲取執行程序的完整路徑,Application.StartupPath通過此獲取的目錄一定是程序所在的目錄。

【相關鏈接】

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved