Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?

Официальный форум Simple-Scada.

Автор Тема: Работа с директориями и файлами  (Прочитано 550 раз)

Серега

  • Постоялец
  • ***
  • Сообщений: 249
    • Просмотр профиля
Работа с директориями и файлами
« : 14 Января 2025, 16:26:53 »
Добрый день!
В секундном скрипте делаем обработку добавления в ячейки таблицы через ScanDirectory имен файлов в директории GetProjectPath + 'User files\'.
Создание файлов через проводник системы (так как знаем, что создать через скаду нельзя) четко отображается в скаде. Есть нюансы с превышением количества файлов над количеством таблицы. Но это чуть позже разбираться будем. Сейчас 3 строки = 3 файла.
Далее через скрипт Table1_OnCellClick(выбираем имя файла) и скрипт кнопки Button1_OnClick(директория + имя файла и действие удаление файла) удаляем файл.
В проводнике наблюдаем удаление файла.
Но вот обновление таблицы через секундный скрипт не происходит. Переход на другую страницу не помогло. Такое ощущение, что не меняется ответ от ScanDirectory.
Секундный скрипт:
Код: (delphi)
var
  i: Integer;
  pathFileLocal:string;
  aList: TM_ScanDirResult;
begin
  pathFileLocal := GetProjectPath + 'User files\';
  aList := ScanDirectory(pathFileLocal, sdtFiles);
  for i := 0 to aList.Count - 1 do
  begin
    Table1.Columns[0].Cells[i+1].Text := IntToStr(i);
    Table1.Columns[1].Cells[i+1].Text := aList[i].Name;
  end;
end.

Можете подсказать что не так?
Жду вопросов и предложений.
« Изменён: 14 Января 2025, 16:38:04 от Simple-Scada »

Simple Scada

  • Глобальный модератор
  • *****
  • Сообщений: 245
    • Просмотр профиля
    • Simple-Scada
Re: Работа с директориями и файлами
« Ответ #1 : 15 Января 2025, 14:05:03 »
Здравствуйте.

Цитировать
Но вот обновление таблицы через секундный скрипт не происходит. Переход на другую страницу не помогло. Такое ощущение, что не меняется ответ от ScanDirectory.
При выполнении Вашего скрипта в таблице будет перезаписываться только то количество строк, сколько было найдено файлов, а в остальных строках таблицы будет сохраняться старая информация (из предыдущего заполнения таблицы). Пример скрипта с очисткой лишних строк:
Код: (delphi)
var
  i: Integer;
  pathFileLocal: string;
  aList: TM_ScanDirResult;
begin
  pathFileLocal := GetProjectPath + 'User files\';
  aList := ScanDirectory(pathFileLocal, sdtFiles);
  for i := 1 to Table1.RowCount - 1 do
    if i <= aList.Count then
    begin
      Table1.Columns[0].Cells[i].Text := IntToStr(i);
      Table1.Columns[1].Cells[i].Text := aList[i - 1].Name;
    end else
    begin
      Table1.Columns[0].Cells[i].Text := '';
      Table1.Columns[1].Cells[i].Text := '';
    end;
end.

Цитировать
Есть нюансы с превышением количества файлов над количеством таблицы. Но это чуть позже разбираться будем.
В скриптах нет возможности динамически добавлять/удалять строки таблицы.

Цитировать
В секундном скрипте
Рекомендуем задать нужный интервал выполнения скрипта, например 10 секунд, чтобы скрипт не выполнялся бесполезно каждую секунду.

Серега

  • Постоялец
  • ***
  • Сообщений: 249
    • Просмотр профиля
Re: Работа с директориями и файлами
« Ответ #2 : 15 Января 2025, 15:29:04 »
Добрый день!
В принципе к обнулению таблицы то же думал обратиться. Спасибо за решение.
Ну а сам скрипт думаю повесить на кнопку. Если надо нажми, посмотри, выбери и сделай что надо. А при окончании работы это все обнулиться.
 

ARV

  • Постоялец
  • ***
  • Сообщений: 117
    • Просмотр профиля
Re: Работа с директориями и файлами
« Ответ #3 : 20 Января 2025, 13:36:28 »
В скриптах нет возможности динамически добавлять/удалять строки таблицы.
Но можно извратиться при помощи базы данных и SQL-запроса: сначала в БД создаем табличку с теми строками, которые надо впихнуть в таблицу, а затем, когда этот запрос отработает, делаем запрос из таблицы Simple-Scada... Потом можно в базе таблицу удалить.