none
有關取得系統目錄 RRS feed

  • 問題

  • 使用vb2005 與xp sp2

    因為工作需要必須取得 視窗系統的目錄 因為使用者有可能安裝在非c的目錄下 所以遇到以下的問題

    vb6的程式碼

    '使用api  目的在呼叫GetWindowsDirectory,GetSystemDirectory,GetTempPath 取得目錄的長字串

        Private Declare Function GetWindowsDirectory Lib "kernel32" Alias "GetWindowsDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Integer) As Integer
        Private Declare Function GetSystemDirectory Lib "kernel32" Alias "GetSystemDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Integer) As Integer
        Private Declare Function GetTempPath Lib "kernel32" Alias "GetTempPathA" (ByVal nBufferLength As Integer, ByVal lpBuffer As String) As Integer

     

     

    Public Function GetWinPath() As String '找尋作業系統目錄  '取得WINDOWS的目錄
            Dim strFolder As String
            Dim lngResult As Integer
            strFolder = New String(Chr(0), MAX_PATH)
            lngResult = GetWindowsDirectory(strFolder, MAX_PATH)
            If lngResult <> 0 Then
                GetWinPath = Left(strFolder, InStr(strFolder, Chr(0)) - 1)
            Else
                GetWinPath = ""
            End If
        End Function
        Public Function GetSystemPath() As String '找尋作業系統-系統目錄SYSTEM32
            Dim strFolder As String
            Dim lngResult As Integer
            strFolder = New String(Chr(0), MAX_PATH)
            lngResult = GetSystemDirectory(strFolder, MAX_PATH)
            If lngResult <> 0 Then
                GetSystemPath = Left(strFolder, InStr(strFolder, Chr(0)) - 1)
            Else
                GetSystemPath = ""
            End If
            GetSystemPath = System.IO.

        End Function
        Public Function GetTmpPath() As String '找尋系統暫存目錄
            Dim strFolder As String
            Dim lngResult As Integer
            strFolder = New String(Chr(0), MAX_PATH)
            lngResult = GetTempPath(MAX_PATH, strFolder)
            If lngResult <> 0 Then
                GetTmpPath = Left(strFolder, InStr(strFolder, Chr(0)) - 1)
            Else
                GetTmpPath = ""
            End If
        End Function

    '以上程式碼取自小吳的網站和小紀的網站參考(時間久遠已經忘記在哪找到的)

     

    雖然在vb2005也可以執行  但我想 是否有更容易的方式取得 像是從framework中取得 是否有這樣的方法  我試過System.IO.Directory 可是好像都沒方法

    是否 我漏掉了該注意的事情呢

    感謝幫忙

     

    我剛剛找到

    GetSystemPath = System.Environment.SystemDirectory  '可以解決第二個函式  其餘正在找尋中

    2007年5月3日 下午 08:38

解答

  • 1 的部份可以用

    http://msdn2.microsoft.com/zh-tw/library/system.environment.getenvironmentvariable(VS.80).aspx

     

    抓 WinDir

     

    或是從 SystemDir 去抓母目錄剪出來。

    2007年5月4日 上午 02:17
    版主
  • 感謝璉大提供方向 所以我將結果整理一下 如下 不過要撿去用的新手 建議還是研究依下璉大的 提示連結 因為又可以多了解一些原理 觸類旁通一下  QQ

     

     


        Public Function GetWinPath() As String '找尋作業系統目錄
            'API的方法=============
            'Dim strFolder As String
            'Dim lngResult As Integer
            'strFolder = New String(Chr(0), MAX_PATH)
            'lngResult = GetWindowsDirectory(strFolder, MAX_PATH)
            'If lngResult <> 0 Then
            '    GetWinPath = Left(strFolder, InStr(strFolder, Chr(0)) - 1)
            'Else
            '    GetWinPath = ""
            'End If
            '======================

         'framework方法
            GetWinPath = Environment.GetEnvironmentVariable("WinDir")

        End Function
        Public Function GetSystemPath() As String '找尋作業系統-系統目錄
            'API的方法=============
            'Dim strFolder As String
            'Dim lngResult As Integer
            'strFolder = New String(Chr(0), MAX_PATH)
            'lngResult = GetSystemDirectory(strFolder, MAX_PATH)
            'If lngResult <> 0 Then
            '    GetSystemPath = Left(strFolder, InStr(strFolder, Chr(0)) - 1)
            'Else
            '    GetSystemPath = ""
            'End If
            '======================
            'framework方法一
            GetSystemPath = System.Environment.SystemDirectory
            'framework方法二
            'GetSystemPath = Environment.GetFolderPath(Environment.SpecialFolder.System)

        End Function
        Public Function GetTmpPath() As String '找尋系統暫存目錄
            'API的方法=============取得 C:\DOCUME~1\James\LOCALS~1\Temp\
            'Dim strFolder As String
            'Dim lngResult As Integer
            'strFolder = New String(Chr(0), MAX_PATH)
            'lngResult = GetTempPath(MAX_PATH, strFolder)
            'If lngResult <> 0 Then
            '    GetTmpPath = Left(strFolder, InStr(strFolder, Chr(0)) - 1)
            'Else
            '    GetTmpPath = ""
            'End If
            '======================
            'framework方法  C:\Documents and Settings\James\Local Settings\Temp  同上取得的目錄相同
            GetTmpPath = Microsoft.VisualBasic.FileIO.SpecialDirectories.Temp

            '另外取得另一個TEMP目錄的方法 取得  C:\Documents and Settings\James\Templates
            'GetTmpPath = Environment.GetFolderPath(Environment.SpecialFolder.Templates)     

        End Function

    '其實 原本的函式 已經可以不用 因為可以直接呼叫了 只是為了與原題意對照而已
    2007年5月4日 上午 04:08

所有回覆

  • 1 的部份可以用

    http://msdn2.microsoft.com/zh-tw/library/system.environment.getenvironmentvariable(VS.80).aspx

     

    抓 WinDir

     

    或是從 SystemDir 去抓母目錄剪出來。

    2007年5月4日 上午 02:17
    版主
  • 感謝璉大提供方向 所以我將結果整理一下 如下 不過要撿去用的新手 建議還是研究依下璉大的 提示連結 因為又可以多了解一些原理 觸類旁通一下  QQ

     

     


        Public Function GetWinPath() As String '找尋作業系統目錄
            'API的方法=============
            'Dim strFolder As String
            'Dim lngResult As Integer
            'strFolder = New String(Chr(0), MAX_PATH)
            'lngResult = GetWindowsDirectory(strFolder, MAX_PATH)
            'If lngResult <> 0 Then
            '    GetWinPath = Left(strFolder, InStr(strFolder, Chr(0)) - 1)
            'Else
            '    GetWinPath = ""
            'End If
            '======================

         'framework方法
            GetWinPath = Environment.GetEnvironmentVariable("WinDir")

        End Function
        Public Function GetSystemPath() As String '找尋作業系統-系統目錄
            'API的方法=============
            'Dim strFolder As String
            'Dim lngResult As Integer
            'strFolder = New String(Chr(0), MAX_PATH)
            'lngResult = GetSystemDirectory(strFolder, MAX_PATH)
            'If lngResult <> 0 Then
            '    GetSystemPath = Left(strFolder, InStr(strFolder, Chr(0)) - 1)
            'Else
            '    GetSystemPath = ""
            'End If
            '======================
            'framework方法一
            GetSystemPath = System.Environment.SystemDirectory
            'framework方法二
            'GetSystemPath = Environment.GetFolderPath(Environment.SpecialFolder.System)

        End Function
        Public Function GetTmpPath() As String '找尋系統暫存目錄
            'API的方法=============取得 C:\DOCUME~1\James\LOCALS~1\Temp\
            'Dim strFolder As String
            'Dim lngResult As Integer
            'strFolder = New String(Chr(0), MAX_PATH)
            'lngResult = GetTempPath(MAX_PATH, strFolder)
            'If lngResult <> 0 Then
            '    GetTmpPath = Left(strFolder, InStr(strFolder, Chr(0)) - 1)
            'Else
            '    GetTmpPath = ""
            'End If
            '======================
            'framework方法  C:\Documents and Settings\James\Local Settings\Temp  同上取得的目錄相同
            GetTmpPath = Microsoft.VisualBasic.FileIO.SpecialDirectories.Temp

            '另外取得另一個TEMP目錄的方法 取得  C:\Documents and Settings\James\Templates
            'GetTmpPath = Environment.GetFolderPath(Environment.SpecialFolder.Templates)     

        End Function

    '其實 原本的函式 已經可以不用 因為可以直接呼叫了 只是為了與原題意對照而已
    2007年5月4日 上午 04:08