Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Event на сетевую папку / 25 сообщений из 27, страница 1 из 2
19.07.2021, 20:04
    #40084734
HOME_X
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Event на сетевую папку
Доброго дня господа !

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
19.07.2021, 20:38
    #40084740
HOME_X
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Event на сетевую папку
HOME_X,

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

Неужели компонент с D7 не работает в D10 ?
...
Рейтинг: 0 / 0
19.07.2021, 22:19
    #40084750
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Event на сетевую папку
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
20.07.2021, 08:31
    #40084779
x1ca4064
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Event на сетевую папку
HOME_X
HOME_X,

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


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

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


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

А если посмотреть ему в исподники?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
20.07.2021, 13:58
    #40084851
HOME_X
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Event на сетевую папку
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
20.07.2021, 13:59
    #40084853
HOME_X
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Event на сетевую папку
Dimitry Sibiryakov

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

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


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

Программист должен вызвать её в коде программы. Правильным способом. В точности как в
примерах.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
20.07.2021, 14:42
    #40084871
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Event на сетевую папку
Я отслеживаю (но не сетевую, а локальную папку), хотя в документации есть что-то про 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
20.07.2021, 18:27
    #40084908
HOME_X
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Event на сетевую папку
Dimitry Sibiryakov

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

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


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

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

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


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

так не спамь и всё будет в порядке
...
Рейтинг: 0 / 0
20.07.2021, 22:51
    #40084944
Relic Hunter
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Event на сетевую папку
Да я в душе не информирован. Хожу Оперой через впн. Никого не трогаю :/
...
Рейтинг: 0 / 0
20.07.2021, 23:20
    #40084949
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Event на сетевую папку
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
21.07.2021, 00:15
    #40084956
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Event на сетевую папку
_Vasilisk_А еще лучше таймаут должен быть INFINITE

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

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

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

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


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