powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / изменить дату создания папки
6 сообщений из 6, страница 1 из 1
изменить дату создания папки
    #33442820
Дмитрий П.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет всем!

Чтобы изменить дату создания или модификации файла в VB6
можно использовать API функцию SetFileTime.
Подскажите, а как можно изменить дату создания папки
(к примеру С:\Windows в WIn98) из программы на VB6?

Спасибо. Дмитрий.
...
Рейтинг: 0 / 0
изменить дату создания папки
    #33444703
Когда меняем дату / время файла пишем.

Код: plaintext
1.
2.
3.
    FileHandle = CreateFile(strFile, lngMode, _
      FILE_SHARE_READ Or FILE_SHARE_WRITE, _
      ByVal  0 &, OPEN_EXISTING, _
      FILE_ATTRIBUTE_NORMAL Or FILE_FLAG_RANDOM_ACCESS,  0 &)

Для папкаи нужно указать флаг FILE_FLAG_BACKUP_SEMANTICS.

Код: plaintext
1.
2.
3.
    FileHandle = CreateFile(strFile, lngMode, _
      FILE_SHARE_READ Or FILE_SHARE_WRITE, _
      ByVal  0 &, OPEN_EXISTING, _
      FILE_FLAG_BACKUP_SEMANTICS,  0 &)

Полный код.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
Type FILETIME
    lngLowDateTime As Long
    lngHighDateTime As Long
End Type

Type SYSTEMTIME
    intYear As Integer
    intMonth As Integer
    intDayOfWeek As Integer
    intDay As Integer
    intHour As Integer
    intMinute As Integer
    intSecond As Integer
    intMilliseconds As Integer
End Type

Type typFileTimes
    datCreated As Date
    datAccessed As Date
    datModified As Date
End Type

Const GENERIC_READ = &H80000000
Const GENERIC_WRITE = &H40000000
Const FILE_SHARE_READ = &H1
Const FILE_SHARE_WRITE = &H2
Const CREATE_ALWAYS =  2 
Const CREATE_NEW =  1 
Const OPEN_ALWAYS =  4 
Const OPEN_EXISTING =  3 
Const TRUNCATE_EXISTING =  5 
Const FILE_ATTRIBUTE_ARCHIVE = &H20
Const FILE_ATTRIBUTE_HIDDEN = &H2
Const FILE_ATTRIBUTE_NORMAL = &H80
Const FILE_ATTRIBUTE_READONLY = &H1
Const FILE_ATTRIBUTE_SYSTEM = &H4
Const FILE_FLAG_DELETE_ON_CLOSE = &H4000000
Const FILE_FLAG_NO_BUFFERING = &H20000000
Const FILE_FLAG_OVERLAPPED = &H40000000
Const FILE_FLAG_POSIX_SEMANTICS = &H1000000
Const FILE_FLAG_RANDOM_ACCESS = &H10000000
Const FILE_FLAG_SEQUENTIAL_SCAN = &H8000000
Const FILE_FLAG_WRITE_THROUGH = &H80000000
Const FILE_FLAG_BACKUP_SEMANTICS = &H2000000

Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" ( _
  ByVal lpFileName As String, _
  ByVal dwDesiredAccess As Long, _
  ByVal dwShareMode As Long, _
  lpSecurityAttributes As Any, _
  ByVal dwCreationDisposition As Long, _
  ByVal dwFlagsAndAttributes As Long, _
  ByVal hTemplateFIle As Long) As Long
  
Declare Function CloseHandle Lib "kernel32" ( _
  ByVal hObject As Long) As Long

Declare Function SystemTimeToFileTime Lib "kernel32" ( _
  lpSystemTime As SYSTEMTIME, _
  lpFileTime As FILETIME) As Long

Declare Function LocalFileTimeToFileTime Lib "kernel32" ( _
  lpLocalFileTime As FILETIME, _
  lpFileTime As FILETIME) As Long

Declare Function SetFileTime Lib "kernel32" ( _
  ByVal hFile As Long, _
  lpCreationTime As FILETIME, _
  lpLastAccessTime As FILETIME, _
  lpLastWriteTime As FILETIME) As Long
  
Function fnQuickOpenFile( _
  strFile As String, _
  Optional lngMode As Long = GENERIC_READ) As Long
    fnQuickOpenFile = CreateFile(strFile, lngMode, _
      FILE_SHARE_READ Or FILE_SHARE_WRITE, _
      ByVal  0 &, OPEN_EXISTING, _
      FILE_FLAG_BACKUP_SEMANTICS,  0 &)
      ' Для изменения даты/времени файла.
      ' FILE_ATTRIBUTE_NORMAL Or FILE_FLAG_RANDOM_ACCESS
End Function

Sub VBATimeToFileTime( _
  datTime As Date, _
  ftTime As FILETIME, _
  Optional fLocal As Boolean = True)
    Dim stSystem As SYSTEMTIME
    Dim ftSystem As FILETIME
    
    Call VBATimeToSysTime(datTime, stSystem)
    
    If CBool(SystemTimeToFileTime(stSystem, ftTime)) Then
        If fLocal Then
            Call LocalFileTimeToFileTime(ftTime, ftSystem)
            ftTime = ftSystem
        End If
    End If
End Sub

Sub VBATimeToSysTime( _
  datTime As Date, _
  stSysTime As SYSTEMTIME)
    With stSysTime
        .intMonth = Month(datTime)
        .intDay = Day(datTime)
        .intYear = Year(datTime)
        .intHour = Hour(datTime)
        .intMinute = Minute(datTime)
        .intSecond = Second(datTime)
    End With
End Sub
  
Function fnSetFileTimes( _
  strFile As String, _
  dftTimes As typFileTimes) As Boolean
    Dim ftCreated As FILETIME
    Dim ftAccessed As FILETIME
    Dim ftModified As FILETIME
    Dim hFile As Long
    
    hFile = fnQuickOpenFile(strFile, GENERIC_WRITE)
    
    If hFile >  0  Then
        With dftTimes
            Call VBATimeToFileTime(.datCreated, ftCreated)
            Call VBATimeToFileTime(.datAccessed, ftAccessed)
            Call VBATimeToFileTime(.datModified, ftModified)
        End With
        
        If CBool(SetFileTime(hFile, ftCreated, _
          ftAccessed, ftModified)) Then
            fnSetFileTimes = True
        End If
        
        Call CloseHandle(hFile)
    End If
End Function

Sub ChangeFileDateTime()
    Dim dft As typFileTimes
    
    With dft
        .datCreated = # 1 / 1 / 1997   12 : 00 : 00  PM#
        .datAccessed = # 1 / 1 / 1997   12 : 00 : 00  PM#
        .datModified = # 1 / 1 / 1997   12 : 00 : 00  PM#
    End With
    
    ' Меняем дату и время файла.
    'Call fnSetFileTimes("D:\1\Test.txt", dft)
    
    ' Меняем дату и время папки.
    Call fnSetFileTimes("D:\1\AAA", dft)
End Sub
...
Рейтинг: 0 / 0
изменить дату создания папки
    #33445246
Дмитрий П.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо Пользователю2 за подробный пример. Я его опробывал в Win98. Но дело в том, что хотя для файлов функция CreateFile возвращает реальный FileHandle, но для папок она возвращает константу INVALID_HANDLE_VALUE (=-1).
Это подтверждается и в MSDN - CreateFile работает с папками только в WinNt и Win2000.
Поэтому вопрос остается в силе - как можно изменить дату создания папки в WIn98 из программы на VB6 без ее удаления?
...
Рейтинг: 0 / 0
изменить дату создания папки
    #33445505
Насчет 98 так и думал, что косяк выйдет. Сам я пробовал на XP, все нормально меняет.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
изменить дату создания папки
    #34748319
Форточкин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Рубята, а если надо поменять дату XLS файла.. Он сохраняет еще дату в свойствах (можно глянуть через меню)???

Надо ну ООООчень:(

Спасибки
...
Рейтинг: 0 / 0
изменить дату создания папки
    #34749047
BigManBIG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BuiltInDocumentProperties Property
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / изменить дату создания папки
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]