パブリックフォルダ内のファイルは、同じコンピュータを使用している他のユーザーや、同じネットワーク上で別のコンピュータを使用しているユーザーと共有できます。
パブリック フォルダ内に配置したファイルまたはフォルダは、そのパブリック フォルダにアクセスできるユーザーと自動的に共有されます。
とあります。
パブリックフォルダとは、Vistaでは「C:/ユーザ/パブリック」、XPでは「C:/Documents and Settings/All Users」にあたります。
VisualStudioで特殊フォルダのパスを取得するSystem.EnvironmentクラスのGetFolderPathメソッドでは、このパブリックフォルダのパスは取得できません。
方法その1:APIを使用してパブリックフォルダのパスを取得する
パブリックフォルダのパスを取得するにはAPI「SHGetSpecialFolderPath」を使用して「CSIDL_COMMON_DOCUMENTS」のパスを取得するようにします。
Public Class Form1 Private Const CSIDL_COMMON_DOCUMENTS As Int32= &H2E Private Declare Function SHGetSpecialFolderPath Lib "shell32.dll" Alias "SHGetSpecialFolderPathA" _ (ByVal hwndOwner As IntPtr, ByVal lpszpath As System.Text.StringBuilder, ByVal nfolder As Int32, ByVal fcreate As Int32) As Int32 Function GetSpecialPath(ByVal nfolder As Int32) As String Dim resultPath As New System.Text.StringBuilder(255) SHGetSpecialFolderPath(Nothing, resultPath, nfolder, 0) Return resultPath.ToString() End Function Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click MessageBox.Show(GetSpecialPath(CSIDL_COMMON_DOCUMENTS)) End Sub End Class
Vistaでは「C:/Users/Public/Documents」、XPでは「C:/Documents and Settings/All Users/Documents」が取得できます。
方法その2:レジストリを使用してパブリックフォルダのパスを取得する
Public Class Form2 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim allUsersDocuments As String = "" Dim regKey As Microsoft.Win32.RegistryKey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey("SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders", False) Try allUsersDocuments = regKey.GetValue("Common Documents", "").ToString Finally regKey.Close() End Try MessageBox.Show(allUsersDocuments) End Sub End Class
こちらもVistaでは「C:/Users/Public/Documents」、XPでは「C:/Documents and Settings/All Users/Documents」が取得できます。
0 件のコメント:
コメントを投稿