データをコピーする際のディレクトリ記述について(Vista)


yayoi  2008-04-07 01:41:19  No: 139472  IP: 192.*.*.*

よろしくお願いします。
VistaではソフトをProgram Filesにインストールしてデータを更新した場合に隠しフォルダのAppData内のProgram Filesに保存されると思います。
そのファイルをコピーする動作をVB6.0で作成したいと考えています。

"C:\ユーザー\ユーザー名\AppData\Local\VirtualStore\Program Files\ソフト名\
の中に保存データがありますが、ディレクトリをうまく指定できません。
C:\ユーザーのユーザーはUsersとすべき?と試しましたがダメでした。
作成環境はXPです。XP上で同じ構成でフォルダを作成した場合にはうまくできました。

どのように指定すればよろしいでしょうか?
また、うまく指定ができるようになった場合、隠しフォルダを隠した状態のままでも操作は行われるでしょうか?

よろしくお願いいたします。

編集 削除
タカシ  2008-04-11 13:24:12  No: 139473  IP: 192.*.*.*

いつも聞いているばかりで回答など初めてですがVISTAにはデータがどこかに行ってしまって泣かされましたので。VISTA任せでフォルダーを決めるのではなく僕の場合は下記により最初からフォルダーを決めておいて明示的に指定して保存するようにしました。  Adobeなどは下記のAppDataPath1にAdobeのフォルダーを作っているようです。何かの本でみつけたものですがご参考まで。

Public Const MAX_PATH = 260

' CSIDLからパスを取得する関数の宣言
Declare Function SHGetFolderPath Lib "ShFolder.dll" _
    Alias "SHGetFolderPathA" _
   (ByVal hwndOwner As Long, _
    ByVal nFolder As Long, _
    ByVal hToken As Long, _
    ByVal dwFlags As Long, _
    ByVal pszPath As String) As Long

' 取り出すパスの種類を指定する定数
Public Const SHGFP_TYPE_CURRENT = 0
Public Const CSIDL_APPDATA = &H1A
Public Const CSIDL_LOCAL_APPDATA = &H1C
Public AppDataPath1, AppDataPath2
'----------------------------------------
'(例です。不足分は適当に追加してください)
Sub GetAppPath()

    Dim strFolderPath         As String * MAX_PATH
    Dim lngWin32apiResultCode As Long

    ' フォルダパス1を取得
    lngWin32apiResultCode = _
        SHGetFolderPath(0, _
                        CSIDL_APPDATA, _
                        SHGFP_TYPE_CURRENT, _
                        0, _
                        strFolderPath)
    ' 
    AppDataPath1 = _
        Left(strFolderPath, _
             InStr(strFolderPath, _
                   vbNullChar) - 1)

    ' フォルダパス2を取得
    lngWin32apiResultCode = _
        SHGetFolderPath(0, _
                        CSIDL_LOCAL_APPDATA, _
                        SHGFP_TYPE_CURRENT, _
                        0, _
                        strFolderPath)
    ' 
    AppDataPath2 = _
        Left(strFolderPath, _
             InStr(strFolderPath, _
                   vbNullChar) - 1)


End Sub

編集 削除