Файлы

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
shkot
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 07.04.2004 (Ср) 9:31

Файлы

Сообщение shkot » 07.04.2004 (Ср) 9:34

Эй, кто - нибудь знает, как вытащить из файла информацию, когда он
был создан? :?:

Sergey-13
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 119
Зарегистрирован: 23.01.2004 (Пт) 16:02
Откуда: Саранск

Сообщение Sergey-13 » 07.04.2004 (Ср) 9:55

чмтай форум, тем было полно

Cyrax
Cyberninja
Cyberninja
Аватара пользователя
 
Сообщения: 891
Зарегистрирован: 25.04.2002 (Чт) 21:20
Откуда: Magnitogorsk, Russia

Сообщение Cyrax » 07.04.2004 (Ср) 15:58

MSDN Library Visual Studio 6.0 писал(а):GetAttr Function


Returns an Integer representing the attributes of a file, directory, or folder.

Syntax

GetAttr(pathname)

The required pathnameargument is astring expression that specifies a file name. The pathname may include the directory or folder, and the drive.

Return Values

The value returned by GetAttr is the sum of the following attribute values:

Constant_______Value___Description
vbNormal________0_________Normal.
vbReadOnly______1________Read-only.
vbHidden________2________Hidden.
vbSystem________4________System file.
vbDirectory______16_______Directory or folder.
vbArchive________32_______File has changed since last backup.


Note Theseconstants are specified by Visual Basic for Applications. The names can be used anywhere in your code in place of the actual values.

Remarks

To determine which attributes are set, use the And operator to perform abitwise comparison of the value returned by the GetAttr function and the value of the individual file attribute you want. If the result is not zero, that attribute is set for the named file. For example, the return value of the following And expression is zero if the Archive attribute is not set:
Код: Выделить всё
Result = GetAttr(FName) And vbArchive

A nonzero value is returned if the Archive attribute is set.

MSDN Library Visual Studio 6.0 писал(а):GetAttr Function Example
This example uses the GetAttr function to determine the attributes of a file and directory or folder.

Код: Выделить всё
Dim MyAttr
' Assume file TESTFILE has hidden attribute set.
MyAttr = GetAttr("TESTFILE")   ' Returns 2.

' Returns nonzero if hidden attribute is set on TESTFILE.
Debug.Print MyAttr And vbHidden   

' Assume file TESTFILE has hidden and read-only attributes set.
MyAttr = GetAttr("TESTFILE")   ' Returns 3.

' Returns nonzero if hidden attribute is set on TESTFILE.
Debug.Print MyAttr And (vbHidden + vbReadOnly)   

' Assume MYDIR is a directory or folder.
MyAttr = GetAttr("MYDIR")   ' Returns 16.
Ты это ему расскажи. Я уже пять болтов отвинтил, и конца не видно... (озадаченно) А это в какую сторону тянуть? Ну-ка... Ага, этот был лишний, этот вообще не отсюда, и этот... Точно, два болта.

Welcome to IRC

shkot
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 07.04.2004 (Ср) 9:31

Файлы

Сообщение shkot » 07.04.2004 (Ср) 16:20

А FName - это типа "С:\666\444\33.exe" или "33.exe" или "33" :?:

Cyrax
Cyberninja
Cyberninja
Аватара пользователя
 
Сообщения: 891
Зарегистрирован: 25.04.2002 (Чт) 21:20
Откуда: Magnitogorsk, Russia

Re: Файлы

Сообщение Cyrax » 07.04.2004 (Ср) 16:28

shkot писал(а):А FName - это типа "С:\666\444\33.exe" или "33.exe" или "33" :?:

а FName - это типа строковая переменная, содержащая путь (_п_о_л_н_ы_й_) до файла
Ты это ему расскажи. Я уже пять болтов отвинтил, и конца не видно... (озадаченно) А это в какую сторону тянуть? Ну-ка... Ага, этот был лишний, этот вообще не отсюда, и этот... Точно, два болта.

Welcome to IRC

shkot
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 07.04.2004 (Ср) 9:31

Файлы

Сообщение shkot » 08.04.2004 (Чт) 14:04

Ага, и чё мне с этого "32" ? Мне нужно знать точную дату
создания/изменения! :?

Cyrax
Cyberninja
Cyberninja
Аватара пользователя
 
Сообщения: 891
Зарегистрирован: 25.04.2002 (Чт) 21:20
Откуда: Magnitogorsk, Russia

Re: Файлы

Сообщение Cyrax » 08.04.2004 (Чт) 14:11

shkot писал(а):Ага, и чё мне с этого "32" ? Мне нужно знать точную дату
создания/изменения! :?
вот как и надо было писать в первом вопросе, а не править пост после того, как на него уже ответили
Код: Выделить всё
Private Const OPEN_EXISTING = 3
Private Type FILETIME
    dwLowDateTime As Long
    dwHighDateTime As Long
End Type
Private Type BY_HANDLE_FILE_INFORMATION
    dwFileAttributes As Long
    ftCreationTime As FILETIME
    ftLastAccessTime As FILETIME
    ftLastWriteTime As FILETIME
    dwVolumeSerialNumber As Long
    nFileSizeHigh As Long
    nFileSizeLow As Long
    nNumberOfLinks As Long
    nFileIndexHigh As Long
    nFileIndexLow As Long
End Type
Private Declare Function GetFileInformationByHandle Lib "kernel32" (ByVal hFile As Long, lpFileInformation As BY_HANDLE_FILE_INFORMATION) As Long
Private 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
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Sub Form_Load()
    'KPD-Team 2001
    'URL: http://www.allapi.net/
    'E-Mail: KPDTeam@allapi.net
    Dim hFile As Long, FileInfo As BY_HANDLE_FILE_INFORMATION
    'create a handle to the file 'c:\autoexec.bat'
    hFile = CreateFile("c:\autoexec.bat", 0, 0, ByVal 0&, OPEN_EXISTING, 0, ByVal 0&)
    'retrieve the file information
    GetFileInformationByHandle hFile, FileInfo
    'close the handle
    CloseHandle hFile
    'show the result
    MsgBox "File size: " + CStr(FileInfo.nFileSizeLow), vbInformation
End Sub
Ты это ему расскажи. Я уже пять болтов отвинтил, и конца не видно... (озадаченно) А это в какую сторону тянуть? Ну-ка... Ага, этот был лишний, этот вообще не отсюда, и этот... Точно, два болта.

Welcome to IRC

shkot
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 07.04.2004 (Ср) 9:31

Файлы

Сообщение shkot » 13.04.2004 (Вт) 15:00

Шо за ботва эта прога ? И в kernel лезет, и в autoexec, качает неизвестно что, не вирус ли?
Я рискнул, но ни фига: файл не создаётся, пишет РАЗМЕР, а не ВРЕМЯ, пробовал переделать - шиш. Давайте что - нибудь попроще. :o

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 13.04.2004 (Вт) 15:15

Тебе вирус закинули! Срочно удаляй все!
Lasciate ogni speranza, voi ch'entrate.

SeRRg
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 343
Зарегистрирован: 25.11.2003 (Вт) 20:14
Откуда: Тюмень!

Сообщение SeRRg » 13.04.2004 (Вт) 16:53

:lol: :lol: :lol:
VB - это звучит!

Cyrax
Cyberninja
Cyberninja
Аватара пользователя
 
Сообщения: 891
Зарегистрирован: 25.04.2002 (Чт) 21:20
Откуда: Magnitogorsk, Russia

Re: Файлы

Сообщение Cyrax » 13.04.2004 (Вт) 17:16

ой... чета у меня уже ум за разум, кажется, заходит...
пример-то тот что надо, только одного не хватает... там в структуре BY_HANDLE_FILE_INFORMATION имеются поля ftCreationTime, ftLastAccessTime и ftLastWriteTime - время создания, время последнего доступа и премя последней модификации файла соответственно... правда это ссылки на структуру FILETIME, содержащуюю старшее и младшее слова длинного беззнакового (кажется так :oops: ). но суть не в этом, для преобразования всего этого хозяйства к удобочитаемой форме нужно последовательно использовать функции FileTimeToLocalFileTime и FileTimeToSystemTime. при этом добавив объявление еще одной структуры и соответствующих функций
Код: Выделить всё
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 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

но чета прикрутить это дело к уже приведенному ранее коду...

а все прикрутил...
FileTimeToLocalFileTime - это не надо

вот
Код: Выделить всё
Option Explicit

Private Const OPEN_EXISTING = 3
Private Type FileTime
    dwLowDateTime As Long
    dwHighDateTime As Long
End Type
Private Type BY_HANDLE_FILE_INFORMATION
    dwFileAttributes As Long
    ftCreationTime As FileTime
    ftLastAccessTime As FileTime
    ftLastWriteTime As FileTime
    dwVolumeSerialNumber As Long
    nFileSizeHigh As Long
    nFileSizeLow As Long
    nNumberOfLinks As Long
    nFileIndexHigh As Long
    nFileIndexLow 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 Declare Function GetFileInformationByHandle Lib "kernel32" (ByVal hFile As Long, lpFileInformation As BY_HANDLE_FILE_INFORMATION) As Long
Private 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
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 Sub Form_Load()
    'KPD-Team 2001
    'URL: http://www.allapi.net/
    'E-Mail: KPDTeam@allapi.net
    Dim hFile As Long, FileInfo As BY_HANDLE_FILE_INFORMATION
    Dim FileTime As SYSTEMTIME
   
    'create a handle to the file 'c:\autoexec.bat'
    hFile = CreateFile("c:\autoexec.bat", 0, 0, ByVal 0&, OPEN_EXISTING, 0, ByVal 0&)
    'retrieve the file information
    GetFileInformationByHandle hFile, FileInfo
    'close the handle
    CloseHandle hFile
    'show the result
    MsgBox "File size: " + CStr(FileInfo.nFileSizeLow), vbInformation
   
    FileTimeToSystemTime FileInfo.ftCreationTime, FileTime
   
    MsgBox "File created by:" & CStr(FileTime.wDay) & "." & CStr(FileTime.wMonth) & "." & CStr(FileTime.wYear)
End Sub
Ты это ему расскажи. Я уже пять болтов отвинтил, и конца не видно... (озадаченно) А это в какую сторону тянуть? Ну-ка... Ага, этот был лишний, этот вообще не отсюда, и этот... Точно, два болта.

Welcome to IRC

SeRRg
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 343
Зарегистрирован: 25.11.2003 (Вт) 20:14
Откуда: Тюмень!

Сообщение SeRRg » 13.04.2004 (Вт) 17:28

А не проще ли?

izm = FileDateTime(puti)
Call MsgBox("Файл изменен: " & izm, , "Text Recover")

И если это не то, то в чем отличие?
VB - это звучит!

Cyrax
Cyberninja
Cyberninja
Аватара пользователя
 
Сообщения: 891
Зарегистрирован: 25.04.2002 (Чт) 21:20
Откуда: Magnitogorsk, Russia

Сообщение Cyrax » 13.04.2004 (Вт) 17:34

SeRRg писал(а):А не проще ли?

izm = FileDateTime(puti)
Call MsgBox("Файл изменен: " & izm, , "Text Recover")

И если это не то, то в чем отличие?
проще... но функция FileDateTime возвращает дату и время последней модификации файла, а человек спрашивал про дату создания файла (а это несколько разные вещи)
Ты это ему расскажи. Я уже пять болтов отвинтил, и конца не видно... (озадаченно) А это в какую сторону тянуть? Ну-ка... Ага, этот был лишний, этот вообще не отсюда, и этот... Точно, два болта.

Welcome to IRC

shkot
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 07.04.2004 (Ср) 9:31

Сообщение shkot » 14.04.2004 (Ср) 16:37

Урра! Наконец - то! :D В итоге получилось (если нужно изменение файла):
MsgBox("Файл изменен: " & FileDateTime(полный_путь) ) , с izm работать не хочет. Что касается БОЛЬШОЙ проги, то wHour почему - то не то число выдает. Однако, wMilliseconds
- это Вы очень круто загнули!!!... :D Да, поскольку у меня XP, файла "c:\autoexec.bat" нет, а то я долго угорал, когда выдало
"File size: 1.1.1601" - мол, файлу аж 400 лет!!! :D Да, ещё, если кто не
знает - копировать файл можно так:
FileCopy "С:\11\22\33.exe", "D:\44\55\66.exe", при этом если файл существует, то просто перепишет и даже спрашивать не будет! :D

Cyrax
Cyberninja
Cyberninja
Аватара пользователя
 
Сообщения: 891
Зарегистрирован: 25.04.2002 (Чт) 21:20
Откуда: Magnitogorsk, Russia

Сообщение Cyrax » 14.04.2004 (Ср) 16:45

shkot писал(а):Что касается БОЛЬШОЙ проги, то wHour почему - то не то число выдает. Однако, wMilliseconds
- это Вы очень круто загнули!!!...

про wHour - действительно... странно :? ... мож я че-нить напартачил...

а вот с миллисекундами - это не мы, это программеры из Microsoft, потому как это Win32Api :wink:
Ты это ему расскажи. Я уже пять болтов отвинтил, и конца не видно... (озадаченно) А это в какую сторону тянуть? Ну-ка... Ага, этот был лишний, этот вообще не отсюда, и этот... Точно, два болта.

Welcome to IRC


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 14

    TopList