Найти последний созданный файл

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

Найти последний созданный файл

Сообщение uhm » 30.08.2006 (Ср) 15:21

Как быстрее всего найти в папке последний созданный файл? Пока умею через FSO перебрать все файлы и найти файл с максимальной DateCreated. Может, еще проще можно?
Быть... или не быть. Вот. В чём вопрос?

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 30.08.2006 (Ср) 15:45

отслеживать изменения в каталоге?
Весь мир матрица, а мы в нем потоки байтов!

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 30.08.2006 (Ср) 15:54


Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 30.08.2006 (Ср) 16:00

> Есть необходимость выполнять определенные действия при
> появлении нового файла в определенной директории,
> анализируя его название. При этом хотелось бы не сканировать
> тупо содержимое папки по таймеру, а ловить
> какое-нибудь событие, связанное с появлением нового файла.
> Может кто подскажет?

На форму кинь таймер с именем tmrNotif и интервалом 500
Добавь модуль, а в модуль вставь код:
======================================
Код: Выделить всё
Option Explicit

  Public Declare Function FindFirstChangeNotification Lib "kernel32" Alias "FindFirstChangeNotificationA" (ByVal
  lpPathName As String, ByVal bWatchSubtree As Long, ByVal dwNotifyFilter As Long) As Long
  Public Declare Function FindNextChangeNotification Lib "kernel32" (ByVal hChangeHandle As Long) As Long
  Public Declare Function FindCloseChangeNotification Lib "kernel32" (ByVal hChangeHandle As Long) As Long
  Public Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long)
  As Long


  Public Const INVALID_HANDLE_VALUE = -1&
  Public Const FILE_NOTIFY_CHANGE_DIR_NAME = &H2
  Public Const FILE_NOTIFY_CHANGE_FILE_NAME = &H1
  Public Const WAIT_FAILED = -1&
  Public Const WAIT_OBJECT_0 = 0&
  Public Const WAIT_ABANDONED = &H80&
  Public Const WAIT_TIMEOUT = &H102&
  Public Const API_TRUE = 1&

  Public objChangeHandle As Long
======================================

В событии LOAD формы добавь код:
======================================
Код: Выделить всё
' Create the Change Notyfication Object
  objChangeHandle = FindFirstChangeNotification("[Путь_к_исследуемой_папке]", API_TRUE, FILE_NOTIFY_CHANGE_DIR_NAME
   Or FILE_NOTIFY_CHANGE_FILE_NAME)
  If objChangeHandle <> INVALID_HANDLE_VALUE Then
      tmrNotif.Enabled = True
  End If
======================================

В событии таймера TIMER вставь код:
======================================
Код: Выделить всё
  Dim retVal As Long
  retVal = WaitForSingleObject(objChangeHandle, 1&)
  Select Case retVal
      Case WAIT_TIMEOUT
          ' No changes detected
      Case WAIT_OBJECT_0
          '
          ' твой код при измененни файловой структуры исследуемой папки
          '
          FindNextChangeNotification objChangeHandle
  End Select
======================================

uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 30.08.2006 (Ср) 16:01

!Viper!, Konst_One - посмотрел, не та задача. Мне нужно не отслеживать изменения, а один раз зайти в папку и найти самый последний в ней файл. Я так подумал - наверное, принципиально проще ничего не сделаешь. Разве что можно как-то сразу получить список файлов, отсортированный по времени создания, и взять оттуда последний файл.
Быть... или не быть. Вот. В чём вопрос?


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

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

Сейчас этот форум просматривают: Mail.ru [бот], Yandex-бот и гости: 51

    TopList