Гость
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Требуется создать несколько рандомных файлов из VBA / 13 сообщений из 13, страница 1 из 1
29.04.2012, 19:35
    #37776894
lbppb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Требуется создать несколько рандомных файлов из VBA
При чем дата создания должна отличаться на миллисекунды. Пробовал ставить задержку между созданием, но она либо не работает, либо округляется до секунды. В общем такой код:
Код: 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
29.04.2012, 20:30
    #37776936
VSVLAD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Требуется создать несколько рандомных файлов из VBA
lbppb,

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

Для проверки я использую Windows Script Host Object Model - FileSystemObject, но мне тут говорят, что такой подход дает неверные миллисекунды. Возможно из-за этого и не получается. Какие еще есть способы извлечения штампа времени создания файла с миллисекундами?
...
Рейтинг: 0 / 0
30.04.2012, 13:14
    #37777377
VSVLAD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Требуется создать несколько рандомных файлов из VBA
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
30.04.2012, 13:46
    #37777399
lbppb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Требуется создать несколько рандомных файлов из VBA
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
30.04.2012, 13:58
    #37777406
VSVLAD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Требуется создать несколько рандомных файлов из VBA
lbppb,
Я же показал методом каким, а FileDateToProcess - я не знаю что за тип, или функция GetFileDateTime - то же
...
Рейтинг: 0 / 0
30.04.2012, 14:15
    #37777414
lbppb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Требуется создать несколько рандомных файлов из VBA
VSVLAD,

Я немного запутался. Вначале, я спрашивал про создание файлов, но теперь мне нужно штамп времени сначала правильно вытаскивать. Я с GetFileTime еще не сталкивался, может есть где почитать как конкретное ей пользоваться?
...
Рейтинг: 0 / 0
30.04.2012, 14:21
    #37777417
AndreTM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Требуется создать несколько рандомных файлов из VBA
Да, уж точно подзапутались...
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
30.04.2012, 14:24
    #37777418
lbppb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Требуется создать несколько рандомных файлов из VBA
AndreTM,

Я именно этот метод и использую для получения штампа времени, но он дает неверные миллисекунды. Мне нужно их брать при помощи GetFileTime.
...
Рейтинг: 0 / 0
30.04.2012, 14:38
    #37777432
AndreTM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Требуется создать несколько рандомных файлов из VBA
lbppbМне нужно их брать при помощи GetFileTime.Ну так и берите, кто вам запрещает-то? Показано же, как 12490255 . Или хэндл файла не можете получить? Или не знаете, как определить переменные пользовательских типов?
...
Рейтинг: 0 / 0
30.04.2012, 15:42
    #37777487
lbppb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Требуется создать несколько рандомных файлов из VBA
Вот так у меня выдает 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
30.04.2012, 16:06
    #37777501
AndreTM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Требуется создать несколько рандомных файлов из VBA
Я до сих пор не понимаю...
То есть взяли вот этот примерчик. Расписали под нас... Запустили...
Код: 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
30.04.2012, 16:20
    #37777512
lbppb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Требуется создать несколько рандомных файлов из VBA
AndreTM,

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


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