2012-02-10 23 views
2

DB内のデータに基づいてファイルをある場所から別の場所に移動するフォームを構築しています。ソースファイルが暗号化されていない限りWindowsエクスプローラのファイル名)と、宛先ファイルが存在しない限り。VBA(MSAccess)でファイルの暗号化をチェックするには

だから私は、次のものを作成しようとしている:

Public Function isEncrypted(file As String) As Boolean 
    Dim info As System.IO.FileInfo 
    info = My.Computer.FileSystem.GetFileInfo(file) 

    Dim attr As System.IO.FileAttributes 
    attr = info.Attributes 

    isEncrypted = ((attr And System.IO.FileAttributes.Encrypted) > 0) 
End Function 

しかし、それはまったく実行されません。誰でもこれについての経験があるか、暗号化をチェックする簡単な方法がありますか? &の名前を変更して暗号化されたファイルを移動しようとすると、アクセスがハングしてクラッシュします。

+0

どのように 'System.IO.FileAttributes'をVBAコードで使用できますか?そのDim文は私のシステムでコンパイラエラーを引き起こします。 – HansUp

+2

@ HansUpのコメントにフォローアップする:あなたが書いたコードはVB.NETコードです。 VBAはVB6に基づいていますが、これはまったく別の動物です。 – phoog

答えて

3

他にも言及したように、vb.netコードがアクセスでコンパイルされることはありません。ファイル属性を取得するには、win32からのシステムコールを使用する必要があります。 FileSystemObject(Scrrun.dll 'Windows Scripting Runtime')オブジェクトは、ファイルが暗号化されているかどうかを列挙しないため、どちらでも機能しません。ここでは、ファイルが暗号化されているかどうかを判断するために使用できるWindows API関数を示します。

Public Enum FileAttribute 
'uses VBA Hex Notation 
    FILE_ATTRIBUTE_READONLY = &H1 
    FILE_ATTRIBUTE_HIDDEN = &H2 
    FILE_ATTRIBUTE_SYSTEM = &H4 
    FILE_ATTRIBUTE_DIRECTORY = &H10 
    FILE_ATTRIBUTE_ARCHIVE = &H20 
    FILE_ATTRIBUTE_DEVICE = &H40 
    FILE_ATTRIBUTE_NORMAL = &H80 
    FILE_ATTRIBUTE_TEMPORARY = &H100 
    FILE_ATTRIBUTE_SPARSE_FILE = &H200 
    FILE_ATTRIBUTE_REPARSE_POINT = &H400 
    FILE_ATTRIBUTE_COMPRESSED = &H800 
    FILE_ATTRIBUTE_OFFLINE = &H1000 
    FILE_ATTRIBUTE_NOT_CONTENT_INDEXED = &H2000 
    FILE_ATTRIBUTE_ENCRYPTED = &H4000 
    FILE_ATTRIBUTE_VIRTUAL = &H10000 
End Enum 

Private Declare Function GetFileAttributes Lib "kernel32.dll" Alias "GetFileAttributesA" (ByVal lpFileName As String) As Long 

Public Sub Test() 

    Dim fileTestPath As String 
    Dim attributes As Long 

    fileTestPath = "C:\yourfile.txt" 

    attributes = GetFileAttributes(fileTestPath) 

    'uses bitwise AND calculations to determine values 
    If (attributes And FileAttribute.FILE_ATTRIBUTE_ARCHIVE) Then Debug.Print "Archive" 
    If (attributes And FileAttribute.FILE_ATTRIBUTE_COMPRESSED) Then Debug.Print "Compressed" 
    If (attributes And FileAttribute.FILE_ATTRIBUTE_DEVICE) Then Debug.Print "Device" 
    If (attributes And FileAttribute.FILE_ATTRIBUTE_DIRECTORY) Then Debug.Print "Directory" 
    If (attributes And FileAttribute.FILE_ATTRIBUTE_ENCRYPTED) Then Debug.Print "Encrypted" 
    If (attributes And FileAttribute.FILE_ATTRIBUTE_HIDDEN) Then Debug.Print "Hidden" 
    If (attributes And FileAttribute.FILE_ATTRIBUTE_NORMAL) Then Debug.Print "Normal" 
    If (attributes And FileAttribute.FILE_ATTRIBUTE_NOT_CONTENT_INDEXED) Then Debug.Print "Not Content Indexed" 
    If (attributes And FileAttribute.FILE_ATTRIBUTE_OFFLINE) Then Debug.Print "Offline" 
    If (attributes And FileAttribute.FILE_ATTRIBUTE_READONLY) Then Debug.Print "ReadOnly" 
    If (attributes And FileAttribute.FILE_ATTRIBUTE_REPARSE_POINT) Then Debug.Print "ReparsePoint" 
    If (attributes And FileAttribute.FILE_ATTRIBUTE_SPARSE_FILE) Then Debug.Print "SparseFile" 
    If (attributes And FileAttribute.FILE_ATTRIBUTE_SYSTEM) Then Debug.Print "System" 
    If (attributes And FileAttribute.FILE_ATTRIBUTE_TEMPORARY) Then Debug.Print "Temporary" 
    If (attributes And FileAttribute.FILE_ATTRIBUTE_VIRTUAL) Then Debug.Print "Virtual" 

End Sub 
+0

チャームのように働いた!助けてくれてありがとう :) –

関連する問題