AW: Frage noch offen... owT
07.12.2011 16:33:36
Nepumuk
Hallo,
einfach so:
Option Explicit
Private Declare Function DeviceIoControl Lib "kernel32.dll" ( _
ByVal hDevice As Long, _
ByVal dwIoControlCode As Long, _
ByRef lpInBuffer As Integer, _
ByVal nInBufferSize As Integer, _
ByRef lpOutBuffer As Long, _
ByVal nOutBufferSize As Long, _
ByRef lpBytesReturned As Long, _
ByVal lpOverlapped As Any) As Long
Private Declare Function CreateFile Lib "kernel32.dll" Alias "CreateFileA" ( _
ByVal lpFileName As String, _
ByVal dwDesiredAccess As Long, _
ByVal dwShareMode As Long, _
ByVal lpSecurityAttributes As Any, _
ByVal dwCreationDisposition As Long, _
ByVal dwFlagsAndAttributes As Long, _
ByVal hTemplateFile As Long) As Long
Private Declare Function CloseHandle Lib "kernel32.dll" ( _
ByVal hObject As Long) As Long
Private Const COMPRESSION_FORMAT_DEFAULT As Long = 1
Private Const FILE_DEVICE_FILE_SYSTEM As Long = &H9
Private Const FILE_READ_DATA As Long = &H1
Private Const FILE_WRITE_DATA As Long = &H2
Private Const GENERIC_READ = &H80000000
Private Const GENERIC_WRITE = &H40000000
Private Const OPEN_EXISTING As Long = 3
Private Const METHOD_BUFFERED As Long = 0
Private Const INVALID_HANDLE_VALUE As Long = -1
Private Const FSCTL_SET_COMPRESSION = FILE_DEVICE_FILE_SYSTEM * (2 ^ 16) Or _
(FILE_READ_DATA Or FILE_WRITE_DATA) * (2 ^ 14) Or 16 * (2 ^ 2) Or METHOD_BUFFERED
Public Sub Test()
Dim lngHandle As Long, lngReturn As Long, lngReturnBytes As Long
lngHandle = CreateFile("D:\Test.txt", GENERIC_READ Or _
GENERIC_WRITE, 0&, 0&, OPEN_EXISTING, 0&, 0&)
If lngHandle <> INVALID_HANDLE_VALUE Then
lngReturn = DeviceIoControl(lngHandle, FSCTL_SET_COMPRESSION, _
COMPRESSION_FORMAT_DEFAULT, 2&, 0&, 0&, lngReturnBytes, 0&)
If lngReturn = 0 Then _
MsgBox "Operation fehlgeschlagen"
Call CloseHandle(lngHandle)
Else
MsgBox "Kein Zugriff auf Datei"
End If
End Sub
Gruß
Nepumuk