Определение последнего из созданных файла/папки

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

Определение последнего из созданных файла/папки

Сообщение Tathagata » 27.09.2004 (Пн) 13:50

как можно отобрать последний из созданных файлов/папок?

klop086
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 88
Зарегистрирован: 30.01.2004 (Пт) 8:46
Откуда: Москва

Сообщение klop086 » 27.09.2004 (Пн) 14:12

Если тебе это нужно один раз, на протяжении всей программы, то можно, в принципе, проверять все файлы по времени создания, и выбрать из них тот, который был создан позже других. Но это гемор.
Сначала подумай, потом помолчи.

Шурик
Самогонщик
Самогонщик
Аватара пользователя
 
Сообщения: 1657
Зарегистрирован: 30.06.2003 (Пн) 13:27
Откуда: из запоя :))))) Матных сообщений: 972

Сообщение Шурик » 27.09.2004 (Пн) 18:30

Хм... а почему один раз??? Весь этот гемор можно делать постоянно через таймер....
2Tathagata:
А вобще можно было бы и поискать....
Вот пример с VBNet:
В данном примере вы можете узнать о том, как можно получить сведения о файле с использованием FileSystemObject. Для использования этого примера установите ссылку на Microsoft Scripting Runtime через меню Project | References.

И не забудьте расположить на форме элемент ListBox!

В этом примере вы можете узнать: Имя файла, Полный путь, Дата создания, Дата модификации, Дата последнего доступа, Размер файла

Код: Выделить всё
Dim FSys As New FileSystemObject
Private Sub Form_Load()
Set qn = FSys.GetFile("D:\2\attributes\FileAtribs2.vbp")
List1.AddItem "Имя файла " & qn.Name
List1.AddItem "Полный путь " & qn.Path
List1.AddItem "Дата создания " & qn.DateCreated
List1.AddItem "Дата модификации " & qn.DateLastModified
List1.AddItem "Дата последнего доступа " & qn.DateLastAccessed
List1.AddItem "Размер файла " & qn.Size
End Sub

Ну, а дальше дело техники...

A.A.Z.
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3035
Зарегистрирован: 30.06.2003 (Пн) 13:38

Сообщение A.A.Z. » 27.09.2004 (Пн) 20:41

А если на VB6, то (сорри, код немного корявый, но вроде работает :)):
Добавь в Project->References "Microsoft Scripting Runtime"
Код: Выделить всё
Option Explicit

Private Declare Function FindFirstFile Lib "kernel32" Alias "FindFirstFileA" (ByVal lpFileName As String, lpFindFileData As WIN32_FIND_DATA) As Long
Private Declare Function FindNextFile Lib "kernel32" Alias "FindNextFileA" (ByVal hFindFile As Long, lpFindFileData As WIN32_FIND_DATA) As Long
Private Declare Function GetFileAttributes Lib "kernel32" Alias "GetFileAttributesA" (ByVal lpFileName As String) As Long
Private Declare Function FindClose Lib "kernel32" (ByVal hFindFile As Long) As Long

Const MAX_PATH = 260
Const MAXDWORD = &HFFFF
Const INVALID_HANDLE_VALUE = -1
Const FILE_ATTRIBUTE_ARCHIVE = &H20
Const FILE_ATTRIBUTE_DIRECTORY = &H10
Const FILE_ATTRIBUTE_HIDDEN = &H2
Const FILE_ATTRIBUTE_NORMAL = &H80
Const FILE_ATTRIBUTE_READONLY = &H1
Const FILE_ATTRIBUTE_SYSTEM = &H4
Const FILE_ATTRIBUTE_TEMPORARY = &H100

Dim FSO As New Scripting.FileSystemObject

Private Type FILETIME
    dwLowDateTime As Long
    dwHighDateTime As Long
End Type

Private Type WIN32_FIND_DATA
    dwFileAttributes As Long
    ftCreationTime As FILETIME
    ftLastAccessTime As FILETIME
    ftLastWriteTime As FILETIME
    nFileSizeHigh As Long
    nFileSizeLow As Long
    dwReserved0 As Long
    dwReserved1 As Long
    cFileName As String * MAX_PATH
    cAlternate As String * 14
End Type

Private Type FILESTRUCT
FileName As String
DateCreated As Date
End Type

Dim NF As FILESTRUCT

Function StripNulls(OriginalStr As String) As String
    If (InStr(OriginalStr, Chr(0)) > 0) Then
        OriginalStr = Left(OriginalStr, InStr(OriginalStr, Chr(0)) - 1)
    End If
    StripNulls = OriginalStr
End Function

Sub FindNewestFile(ByVal Path$)
Dim FileName As String, DirName As String, dirNames() As String, Dir As Integer, I As Integer, hSearch As Long, WFD As WIN32_FIND_DATA, Cont As Integer
If Right(Path, 1) <> "\" Then Path = Path & "\"
nDir = 0
ReDim dirNames(nDir)
Cont = True
hSearch = FindFirstFile(Path & "*", WFD)
If hSearch <> INVALID_HANDLE_VALUE Then
Do While Cont
DirName = StripNulls(WFD.cFileName)
If (DirName <> ".") And (DirName <> "..") Then
If GetFileAttributes(Path & DirName) And FILE_ATTRIBUTE_DIRECTORY Then
dirNames(nDir) = DirName
nDir = nDir + 1
ReDim Preserve dirNames(nDir)
End If
End If
Cont = FindNextFile(hSearch, WFD)
Loop
Cont = FindClose(hSearch)
End If
hSearch = FindFirstFile(Path & "*.*", WFD)
Cont = True
If hSearch <> INVALID_HANDLE_VALUE Then
While Cont
FileName = StripNulls(WFD.cFileName)
If (FileName <> ".") And (FileName <> "..") Then
If FSO.FolderExists(Path & FileName) Then GoTo 1
If NF.DateCreated < FSO.GetFile(Path & FileName).DateCreated Then NF.FileName = Path & FileName: NF.DateCreated = FSO.GetFile(Path & FileName).DateCreated
1 End If
Cont = FindNextFile(hSearch, WFD)
Wend
Cont = FindClose(hSearch)
End If
If nDir > 0 Then
For I = 0 To nDir - 1
FindNewestFile Path & dirNames(I) & "\"
Next I
End If
End Sub

Sub Command1_Click()
Dim I&
For I = Asc("A") To Asc("Z")
FindNewestFile Chr(I) & ":\"
Next
MsgBox NF.FileName & Space(2) & NF.DateCreated
End Sub
По нажатии на кнопку Command1 он ищет самый новый файл на всех дисках от A: до Z:.

Tathagata
Новичок
Новичок
 
Сообщения: 36
Зарегистрирован: 26.07.2004 (Пн) 14:56

Сообщение Tathagata » 28.09.2004 (Вт) 10:32

Спасибо, буду пробовать.


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

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

Сейчас этот форум просматривают: С.Т., Google-бот, SemrushBot, Yandex-бот и гости: 2

    TopList