' Открывает указанный файл в режиме двоичного доступа.
' Эта функция необходима нам для получения доступа к датам файла и изменения их.
Declare Function lopen& Lib "kernel32" Alias "_lopen" (ByVal lpPathName As String, ByVal iReadWrite As Long)
' Закрывает указанный файл.
Declare Function lclose& Lib "kernel32" Alias "_lclose" (ByVal hFile As Long)
Public Const READAPI = 0
Public Const WRITEAPI = 1
Public Const READ_WRITE = 2
' Получает информацию из указанного файла о дате времени.
' Аргументы lpCreationTime, lpLastAcccessTime и lpLastWriteTime могут быть
' установлены в ноль (тогда передайте эти аргументы ByVal As Long), если
' вам они не нужны. Дата возвращается этой функцией в формате UTC.
Declare Function GetFileTime& Lib "kernel32" (ByVal hFile As Long, lpCreationTime As FILETIME, lpLastAccessTime As FILETIME, lpLastWriteTime As FILETIME)
' Устанавливает время создания, изменения и последнего доступа к файлу.
Declare Function SetFileTime& Lib "kernel32" (ByVal hFile As Long, lpCreationTime As FILETIME, lpLastAccessTime As FILETIME, lpLastWriteTime As FILETIME)
' 64-битное число, указывающее на прошедшее время
' с 1 января 1601 г. с единицей измерения 100 наносекунд.
Type FILETIME ' 8 бит
dwLowDateTime As Long
dwHighDateTime As Long
End Type
' Записывает аргумент со структурой FILETIME
' во второй аргумент со структурой SYSTEMTIME.
Declare Function FileTimeToSystemTime& Lib "kernel32" (lpFileTime As FILETIME, lpSystemTime As SYSTEMTIME)
' Записывает аргумент со структурой SYSTEMTIME
' во второй аргумент со структурой FILETIME.
Declare Function SystemTimeToFileTime& Lib "kernel32" (lpSystemTime As SYSTEMTIME, lpFileTime As FILETIME)
' Эта структура содержит информацию о времени и дате.
Type SYSTEMTIME ' 16 бит
wYear As Integer
wMonth As Integer
wDayOfWeek As Integer
wDay As Integer
wHour As Integer
wMinute As Integer
wSecond As Integer
wMilliseconds As Integer
End Type
А затем для работы всего этого нужно сделать следующие:
Sub Main()
Dim lFileHwnd As Long
Dim lDummy As Long
Dim ftModified As FILETIME
Dim ftCreated As FILETIME
Dim ftAccessed As FILETIME
Dim stCreated As SYSTEMTIME
' Поменяйте C:\AUTOEXEC.BAT на любой другой файл
lFileHwnd = lopen("C:\AUTOEXEC.BAT", READ_WRITE)
GetFileTime lFileHwnd, ftCreated, ftAccessed, ftModified
FileTimeToSystemTime ftCreated, stCreated
With stCreated
Debug.Print .wDay & "." & .wMonth & "." & .wYear & ", " & .wHour & ":" & .wMinute & ":" & .wSecond & ":" & .wMilliseconds
End With
' Увеличивает год создания файла на 5
stCreated.wYear = stCreated.wYear + 5
SystemTimeToFileTime stCreated, ftCreated
SetFileTime lFileHwnd, ftCreated, ftAccessed, ftModified
' Проверка
GetFileTime lFileHwnd, ftCreated, ftAccessed, ftModified
FileTimeToSystemTime ftCreated, stCreated
With stCreated
Debug.Print .wDay & "." & .wMonth & "." & .wYear
End With
Public Structure FILETIME
Dim dwLowDateTime As Integer
Dim dwHighDateTime As Integer
End Structure
Public Structure WIN32_FIND_DATA
Dim dwFileAttributes As Integer
Dim ftCreationTime As FILETIME
Dim ftLastAccessTime As FILETIME
Dim ftLastWriteTime As FILETIME
Dim nFileSizeHigh As Integer
Dim nFileSizeLow As Integer
Dim dwReserved0 As Integer
Dim dwReserved1 As Integer
Dim cFileName As String
Dim cAlternate As String
End Structure
Public Declare Function FindFirstFile Lib "kernel32" Alias "FindFirstFileA" _
ByVal lpFileName As String, ByVal lpFindFileData As WIN32_FIND_DATA) As Integer
For Each files In IO.Directory.GetFiles()
Dim hfile as Integer
Dim time As WIN32_FIND_DATA
hfile=FindFirstFile(files, time)
Next
Sergey_next писал(а):Скажите, где ошибка?
Не верю! С другой стороны, имя файла у тебя есть, остается использовать его для API функций в которые ты пытался отправить объект FileInfo.Sergey_next писал(а):Когда я получаю имя файла, то это происходит почти мгновенно, а когда хочу получить время создания(File.GetCreationTime), то процесс длится несколько минут.
Зачем двойную работу делаешь? Сразу получай имя файла или время его создания.Sergey_next писал(а):
- Код: Выделить всё
For Each files In IO.Directory.GetFiles
ListBox1.Items.Add(files)
Next
For Each member In ListBox1.Items
TextBox3.Text = My.Computer.FileSystem.GetName(member)
Next
Sub Main()
Dim fl As FileInfo
Dim di As New DirectoryInfo("C:\Temp")
For Each fl In di.GetFiles()
Console.WriteLine("{0}:{1})", fl.Name, fl.CreationTime)
Next
End Sub
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 20