powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Event на сетевую папку
25 сообщений из 27, страница 1 из 2
Event на сетевую папку
    #40084734
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго дня господа !

Delphi 10.3.3. 64-bit

Нужно отслеживать изменения в списке сетевых папок
(т.е. положили новый файл, удалил, видоизменили и т.д.)

X:\USERS\LIST\F1\*.txt
X:\USERS\LIST\F2\*.txt
.........................
X:\USERS\LIST\FN\*.txt

Приложение должно сообщать о таком изменении.
В Delphi 7 вроде был подобный компонент, что есть в Delphi 10

Подскажите пожалуйста ...
...
Рейтинг: 0 / 0
Event на сетевую папку
    #40084740
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HOME_X,

Внимание - " сетевые папки "
...
Рейтинг: 0 / 0
Event на сетевую папку
    #40084742
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HOME_X
В Delphi 7 вроде был подобный компонент, что есть в Delphi 10

Неужели компонент с D7 не работает в D10 ?
...
Рейтинг: 0 / 0
Event на сетевую папку
    #40084750
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HOME_XВнимание - "_*сетевые папки*_"

https://docs.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-readdirectorychangesw

Внимание:
ReadDirectoryChangesW fails with ERROR_INVALID_PARAMETER when the buffer length is
greater than 64 KB and the application is monitoring a directory over the network.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Event на сетевую папку
    #40084779
x1ca4064
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HOME_X
HOME_X,

Внимание - " сетевые папки "


Попробуйте с FindFirstChangeNotification: оно работает, вроде, с сетевыми папками, но в документации как-то странно об этом сказанно - типа может не сработать :)
...
Рейтинг: 0 / 0
Event на сетевую папку
    #40084849
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBr
HOME_X
В Delphi 7 вроде был подобный компонент, что есть в Delphi 10

Неужели компонент с D7 не работает в D10 ?


Да не помню как этот тип полностью называется. (вроде было - что-то)
И работает ли он с сетью и как именно работает тоже не ясно (если по принципу таймера - такое не надо)
...
Рейтинг: 0 / 0
Event на сетевую папку
    #40084850
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HOME_XИ работает ли он с сетью и как именно работает тоже не ясно

А если посмотреть ему в исподники?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Event на сетевую папку
    #40084851
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

HOME_XВнимание - "_*сетевые папки*_"

https://docs.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-readdirectorychangesw

Внимание:
ReadDirectoryChangesW fails with ERROR_INVALID_PARAMETER when the buffer length is
greater than 64 KB and the application is monitoring a directory over the network.


Насколько понял Вы предлагаете функцию - как она будет запускаться ?
Через таймер ? Как ее привести в плоскость СОБЫТИЯ ?
...
Рейтинг: 0 / 0
Event на сетевую папку
    #40084853
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

HOME_XИ работает ли он с сетью и как именно работает тоже не ясно

А если посмотреть ему в исподники?..


не помню как этот тип полностью называется
Можете сказать как в 10.3.3 это обзываеться
...
Рейтинг: 0 / 0
Event на сетевую папку
    #40084856
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HOME_Xкак она будет запускаться ?

Программист должен вызвать её в коде программы. Правильным способом. В точности как в
примерах.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Event на сетевую папку
    #40084871
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я отслеживаю (но не сетевую, а локальную папку), хотя в документации есть что-то про SMB

Код: pascal
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.
  TMonDirThread = class(TThread)
  private
    FPath: string;
    procedure ThreadStop1;
    procedure StartPrint;
    procedure ThreadStart1;
    procedure DeleteFile1;


  public
    constructor Create(const aPath: String); overload;
  protected
    procedure Execute; override;
  end;


procedure TMonDirThread.Execute;
var
  HandleChange: THandle;  // Handle создаваемого объекта для ожидания события 
begin 
// -- Создаем объект для ожидания события 
  HandleChange :=
    FindFirstChangeNotification(
      PChar(FPath),                           // Проверяемый каталог
      False,                                  // Подкаталоги не проверяются
      FILE_NOTIFY_CHANGE_FILE_NAME +          // Проверка создания/удаления/
      FILE_NOTIFY_CHANGE_ATTRIBUTES);         // переименования/изменения файлов

//{$WARN SYMBOL_PLATFORM OFF}
//// -- При ошибке Win32Check выводит сообщение и прерывает Execute.
//    System.SysUtils.Win32Check(HandleChange <> INVALID_HANDLE_VALUE);
//{$WARN SYMBOL_PLATFORM ON}

  Synchronize(ThreadStart1);               // Сообщение о старте потока



  try
// -- Цикл, пока для потока не будет выдана команда Terminate
    while not Terminated do
    begin
      case WaitForSingleObject(HandleChange, 1000) of
        WAIT_FAILED:   Terminate;                // Ошибка, завершаем поток
        WAIT_OBJECT_0: Synchronize(StartPrint); // Сообщаем об изменении

      end;


      FindNextChangeNotification(HandleChange);
    end;// while

  finally
    FindCloseChangeNotification(HandleChange);
//    CloseHandle(HandleChange);
  end;//try

  Synchronize(ThreadStop1);                     // Сообщаем о завершении потока
end;




https://docs.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-findfirstchangenotificationa
...
Рейтинг: 0 / 0
Event на сетевую папку
    #40084908
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

HOME_Xкак она будет запускаться ?

Программист должен вызвать её в коде программы. Правильным способом. В точности как в
примерах.


Т.е. прямой вызов из основного приложения
У меня сейчас таймер стоит делает почти аналогичное

Думал убрать таймер - и завязаться на событие ...
...
Рейтинг: 0 / 0
Event на сетевую папку
    #40084909
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11,

Очень благодарен за Ваш код !
Принято к рассмотрению и адаптированию
Еще раз спасибо за пример
...
Рейтинг: 0 / 0
Event на сетевую папку
    #40084913
Фотография Relic Hunter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
можно стандартный виндовый аудит настроить и через апи читать.
...
Рейтинг: 0 / 0
Event на сетевую папку
    #40084915
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Event на сетевую папку
    #40084921
Фотография Relic Hunter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник


"Ты заблокирован, потому что с твоего IP-адреса сыпался спам!"
...
Рейтинг: 0 / 0
Event на сетевую папку
    #40084941
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Relic Hunter
"Ты заблокирован, потому что с твоего IP-адреса сыпался спам!"

так не спамь и всё будет в порядке
...
Рейтинг: 0 / 0
Event на сетевую папку
    #40084944
Фотография Relic Hunter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да я в душе не информирован. Хожу Оперой через впн. Никого не трогаю :/
...
Рейтинг: 0 / 0
Event на сетевую папку
    #40084949
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
 while not Terminated do
    begin
      case WaitForSingleObject(HandleChange, 1000) of
        WAIT_FAILED:   Terminate;                // Ошибка, завершаем поток
        WAIT_OBJECT_0: Synchronize(StartPrint); // Сообщаем об изменении
      end;
      FindNextChangeNotification(HandleChange);
    end;// while

Как минимум, должно быть так
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
 while not Terminated do
    begin
      case WaitForSingleObject(HandleChange, 1000) of
        WAIT_FAILED:   Terminate;                // Ошибка, завершаем поток
        WAIT_OBJECT_0: begin
          Synchronize(StartPrint); // Сообщаем об изменении
          FindNextChangeNotification(HandleChange);
      end;
    end;// while

А еще лучше таймаут должен быть INFINITE
...
Рейтинг: 0 / 0
Event на сетевую папку
    #40084956
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_А еще лучше таймаут должен быть INFINITE

Тогда он не сможет реагировать на Terminate и понадобится WaitForMultipleObjects и
дополнительный пинок (что, впрочем, будет лучше в любом случае).
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Event на сетевую папку
    #40085040
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
Тогда он не сможет реагировать на Terminate и понадобится WaitForMultipleObjects
Это само собой
...
Рейтинг: 0 / 0
Event на сетевую папку
    #40085047
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_Это само собой

Для этого "само собой" нужен программист, а у нас тут топикстартер...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Event на сетевую папку
    #40085067
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
Для этого "само собой" нужен программист,
Я для X11 писал
...
Рейтинг: 0 / 0
Event на сетевую папку
    #40085364
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

Тогда он не сможет реагировать на Terminate и понадобится WaitForMultipleObjects и
дополнительный пинок (что, впрочем, будет лучше в любом случае).

Это решается перекрытием TerminatedSet() и запуском потока оттуда. Ну и проверкой на значение Terminated в Execute(), в правильном месте. А вот после таких таймаутов, как выше, и получаются бесячие приложения, которые вроде закрыл уже, а они потом по пять минут в процессах висят.
...
Рейтинг: 0 / 0
Event на сетевую папку
    #40085366
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
del.
...
Рейтинг: 0 / 0
25 сообщений из 27, страница 1 из 2
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Event на сетевую папку
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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