powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Требуется создать несколько рандомных файлов из VBA
13 сообщений из 13, страница 1 из 1
Требуется создать несколько рандомных файлов из VBA
    #37776894
Фотография lbppb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
При чем дата создания должна отличаться на миллисекунды. Пробовал ставить задержку между созданием, но она либо не работает, либо округляется до секунды. В общем такой код:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
    For y = 1 To intNFiles
    Set objFSO = New FileSystemObject
         Set objFSOFile = objFSO.CreateTextFile(strSourceFolder & "Test" & y & ".txt", False)
         Sleep 95&
    Set objFSO = Nothing
    Set objFSOFile = Nothing
    Next



Нашел вариант с использованием API SetFileDate, но это только на край. Так как быть, кто подскажет?
...
Рейтинг: 0 / 0
Требуется создать несколько рандомных файлов из VBA
    #37776936
Фотография VSVLAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lbppb,

А как ты проверяешь время создания файла? случайно не через окно свойства? Так как там округляется, и не увидишь фактический результат
...
Рейтинг: 0 / 0
Требуется создать несколько рандомных файлов из VBA
    #37776946
Фотография lbppb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VSVLAD,

Для проверки я использую Windows Script Host Object Model - FileSystemObject, но мне тут говорят, что такой подход дает неверные миллисекунды. Возможно из-за этого и не получается. Какие еще есть способы извлечения штампа времени создания файла с миллисекундами?
...
Рейтинг: 0 / 0
Требуется создать несколько рандомных файлов из VBA
    #37777377
Фотография VSVLAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lbppb,
Лучше попробовать через API, пробуй через:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
Type FILETIME
        dwLowDateTime As Long
        dwHighDateTime As Long
End Type

Type SYSTEMTIME
        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

Declare Function GetFileTime Lib "kernel32" Alias "GetFileTime" (ByVal hFile As Long, lpCreationTime As FILETIME, lpLastAccessTime As FILETIME, lpLastWriteTime As FILETIME) As Long

Declare Function FileTimeToSystemTime Lib "kernel32" Alias "FileTimeToSystemTime" (lpFileTime As FILETIME, lpSystemTime As SYSTEMTIME) As Long



hFile получить через CreateFile + OPEN_EXISTING флаг. Ну а дальше разберёшься думаю. Если нет, показывай наброски доделаем
...
Рейтинг: 0 / 0
Требуется создать несколько рандомных файлов из VBA
    #37777399
Фотография lbppb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VSVLAD,

Я пробую вот так, но она ругатеся на количество аргументов для GetFileDateTime:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
Sub RetrieveFileDateTime()
Dim FName As String
Dim Result As Boolean
Dim TheNewTime As Double
Dim WhatTime As FileDateToProcess

FName = "C:\Users\FileNo2.txt"
WhatTime = FileDateCreate

TheNewTime = GetFileDateTime(Filename:=FName, WhichDateToGet:=WhatTime)
If TheNewTime < 0 Then
    Debug.Print "An error occurred in GetFileDateTime"
Else
    Debug.Print "File Date/Time is to: " & Format(TheNewTime, "dd-mmm-yyyy hh:mm:ss.mss")
End If
End Sub
...
Рейтинг: 0 / 0
Требуется создать несколько рандомных файлов из VBA
    #37777406
Фотография VSVLAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lbppb,
Я же показал методом каким, а FileDateToProcess - я не знаю что за тип, или функция GetFileDateTime - то же
...
Рейтинг: 0 / 0
Требуется создать несколько рандомных файлов из VBA
    #37777414
Фотография lbppb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VSVLAD,

Я немного запутался. Вначале, я спрашивал про создание файлов, но теперь мне нужно штамп времени сначала правильно вытаскивать. Я с GetFileTime еще не сталкивался, может есть где почитать как конкретное ей пользоваться?
...
Рейтинг: 0 / 0
Требуется создать несколько рандомных файлов из VBA
    #37777417
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, уж точно подзапутались...
http://msdn.microsoft.com/en-us/library/sheydkke(v=vs.85).aspx
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Function ShowFileAccessInfo(filespec)
   Dim fso, f, s
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set f = fso.GetFile(filespec)
   s = f.Path & "<br>"
   s = s & "Created: " & f.DateCreated & "<br>"
   s = s & "Last Accessed: " & f.DateLastAccessed & "<br>"
   s = s & "Last Modified: " & f.DateLastModified   
   ShowFileAccessInfo = s
End Function
...
Рейтинг: 0 / 0
Требуется создать несколько рандомных файлов из VBA
    #37777418
Фотография lbppb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndreTM,

Я именно этот метод и использую для получения штампа времени, но он дает неверные миллисекунды. Мне нужно их брать при помощи GetFileTime.
...
Рейтинг: 0 / 0
Требуется создать несколько рандомных файлов из VBA
    #37777432
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lbppbМне нужно их брать при помощи GetFileTime.Ну так и берите, кто вам запрещает-то? Показано же, как 12490255 . Или хэндл файла не можете получить? Или не знаете, как определить переменные пользовательских типов?
...
Рейтинг: 0 / 0
Требуется создать несколько рандомных файлов из VBA
    #37777487
Фотография lbppb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот так у меня выдает 1601-1-1 2:0:0.0

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
Sub GetTheFileStamp()

    Dim lngHandle As Long
    Dim udtCreated As FILETIME
    Dim udtModified As FILETIME
    Dim udtAccessed As FILETIME
    Dim SysTime As SYSTEMTIME
    Dim udtCreatedLT As FILETIME
    
    lngHandle = CreateFile("C:\FileNo2.txt", GENERIC_WRITE, FILE_SHARE_READ Or FILE_SHARE_WRITE, ByVal 0&, OPEN_EXISTING, 0, 0)

    GetFileTime lngHandle, udtCreated, udtAccessed, udtModified
    
    FileTimeToLocalFileTime udtCreated, udtCreatedLT
    
    FileTimeToSystemTime udtCreatedLT, SysTime
    
    CloseHandle lngHandle
    
    MsgBox Str$(SysTime.wYear) & "-" & Str$(SysTime.wMonth) & "-" & Str$(SysTime.wDay) & " " & Str$(SysTime.wHour) & ":" & Str$(SysTime.wMinute) & ":" & Str$(SysTime.wSecond) & "." & Str$(SysTime.wMilliseconds)

End Sub
...
Рейтинг: 0 / 0
Требуется создать несколько рандомных файлов из VBA
    #37777501
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я до сих пор не понимаю...
То есть взяли вот этот примерчик. Расписали под нас... Запустили...
Код: vbnet
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.
Option Explicit

Private Type FILETIME
   dwLowDateTime As Long
   dwHighDateTime As Long
 End Type

Private Type SYSTEMTIME
   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

 Private Const GENERIC_WRITE = &H40000000
 Private Const OPEN_EXISTING = 3
 Private Const FILE_SHARE_READ = &H1
 Private Const FILE_SHARE_WRITE = &H2

 Private Declare Function GetFileTime Lib "kernel32" (ByVal hFile As Long, _
  lpCreationTime As FILETIME, lpLastAccessTime As FILETIME, _
  lpLastWriteTime As FILETIME) As Long

 Private Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As String, _
  ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, lpSecurityAttributes As Long, _
  ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long

 Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long

 Private Declare Function FileTimeToSystemTime Lib "kernel32" (lpFileTime As FILETIME, lpSystemTime As SYSTEMTIME) As Long

 Private Declare Function FileTimeToLocalFileTime Lib "kernel32" (lpFileTime As FILETIME, lpLocalFileTime As FILETIME) As Long


 Sub Test()
   Dim lngHandle As Long
   Dim Ft1 As FILETIME, Ft2 As FILETIME, SysTime As SYSTEMTIME

   'открытие файла
   lngHandle = CreateFile("C:\Users\FileNo2.txt", GENERIC_WRITE, _
       FILE_SHARE_READ Or FILE_SHARE_WRITE, ByVal 0&, _
       OPEN_EXISTING, 0, 0)
   'времена файла
   GetFileTime lngHandle, Ft1, Ft1, Ft2
   'преобразование форматов времени
   FileTimeToLocalFileTime Ft2, Ft1
   'преобразование форматов времени
   FileTimeToSystemTime Ft1, SysTime
   MsgBox Str$(SysTime.wYear) & "-" & Str$(SysTime.wMonth) & "-" & _
    Str$(SysTime.wDay) & " " & Str$(SysTime.wHour) & ":" & _
    Str$(SysTime.wMinute) & ":" & Str$(SysTime.wSecond) & "." & _
    Str$(SysTime.wMilliseconds)
   'закрытие файла
   CloseHandle lngHandle
 End Sub

Всё работает, всё выдает...
---------------------------
Microsoft Excel
---------------------------
2012- 4- 30 13: 52: 7. 875
---------------------------
ОК
---------------------------
...
Рейтинг: 0 / 0
Требуется создать несколько рандомных файлов из VBA
    #37777512
Фотография lbppb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndreTM,

Огромное спасибо! Я совсем забыл про постоянные.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Требуется создать несколько рандомных файлов из VBA
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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