Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.04.2019, 11:49   #1
3D Hunter
Сумрачная тень
Форумчанин
 
Аватар для 3D Hunter
 
Регистрация: 05.03.2009
Сообщений: 689
По умолчанию Удаление файлов по маске через shfileoperation()

Доброго времени суток!
Не на всех компах функция shfileoperation удаляет по маске файлы (винда 7 работает, вин сервер 2008 не срабатывает).
Вот выдержка из кода:
Код:
        //добавляем файлы прошлых суток в рамках месяца предыдущего штампа в архив
        LFileName:=Format('%s%s%s',
                          [LLogPath,
                           NAME_PREFIX[ALogType],
                           FormatDateTime('yyyy-mm-"*.log"',FLastLogStamp[ALogType])]);
        LZip.AddFiles(LFileName);

        //настраиваем структуру работы с файлами
        ZeroMemory(Addr(LSH),SizeOf(TSHFileOpStruct));
        LSH.wFunc:=FO_DELETE;
        LSH.pFrom:=PChar(LFileName);
        LSH.fFlags:=FOF_SILENT or
                    FOF_NOERRORUI or
                    FOF_NOCONFIRMATION or
                    FOF_MULTIDESTFILES or
                    FOF_FILESONLY;

        //удаляем добавленные в архив файлы с диска
        SHFileOperation(LSH);
Сразу скажу, значение переменной LFileName корректно и отражает ВСЕГДА валидный путь.

Предполагаю, проблема кроется в форматировании FormatDateTime.

Буду благодарен за любую помощь или пинок))
"ковыряю изнутри" (с)
3D Hunter вне форума Ответить с цитированием
Старый 02.04.2019, 12:22   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Предполагаю, проблема кроется в форматировании FormatDateTime.
А какая там может быть проблема? Разве что FLastLogStamp[ALogType] не та дата. Ну можно еще *.log вынести из параметра функции, а можно и не выносить

ЗЫ для полной убежденности в лог записывать маску ) Ну и отказываться же от удаления может по разным причинам
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 02.04.2019 в 12:33.
Аватар вне форума Ответить с цитированием
Старый 02.04.2019, 13:28   #3
3D Hunter
Сумрачная тень
Форумчанин
 
Аватар для 3D Hunter
 
Регистрация: 05.03.2009
Сообщений: 689
По умолчанию

я озвучил проблему в топике - при равной ситуации (пути к тестовым файлам сохранены) в вин 7 работает, в вин 2008 не удаляются файлы.

Цитата:
Разве что FLastLogStamp[ALogType] не та дата
дата та, маска строится за март месяц. А файлов, отвечающих маске - много, и они не удаляются. Код работает в одной системе и не работает в другой (AV нет, просто не удаляются файлы).
"ковыряю изнутри" (с)

Последний раз редактировалось 3D Hunter; 02.04.2019 в 13:30.
3D Hunter вне форума Ответить с цитированием
Старый 02.04.2019, 13:33   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

Так что возвращает SHFileOperation?
p51x вне форума Ответить с цитированием
Старый 03.04.2019, 21:57   #5
leoparrd
Заблокирован
 
Регистрация: 27.08.2010
Сообщений: 37
По умолчанию

Тут может всё что угодно.
Мой вам совет. Без запуска функции сделайте простой вывод в список всех аргументов, которые использует функция.
Обратите внимание на флаги.
Там есть один хитрый флаг, указывающий, что путь задаётся в аргументе.
Каждая ось обрабатывает это по-разному. Одна игнорирует, а вот серверные оси возможно следуют буквально.
У меня как-то была ситуация, что пришлось устанавливать каждую папку отдельно, то есть открывать её. А только потом производить нужные действия.
И вообще. Почему бы попросту не составить список по нужной маске, а потом удалить каждый файл обычным способом?

А может заморочки с юникодом?
Попробуйте SHFileOperationW

Последний раз редактировалось leoparrd; 03.04.2019 в 22:03.
leoparrd вне форума Ответить с цитированием
Старый 18.04.2019, 13:46   #6
3D Hunter
Сумрачная тень
Форумчанин
 
Аватар для 3D Hunter
 
Регистрация: 05.03.2009
Сообщений: 689
По умолчанию

Проблема была в банальной вещи. Не было в конце pFrom два завершающих символа #0. Тема закрыта
"ковыряю изнутри" (с)
3D Hunter вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Осуществить копирование файлов без замены существующих через функцию SHFileOperation Maxjuvefan Общие вопросы Delphi 11 20.12.2016 14:28
Поиск файлов по маске и нахождения общего размера найденных файлов и вывод в терминал Колямбий Помощь студентам 0 21.04.2013 21:31
Удаление строк по маске MSD Общие вопросы Delphi 10 16.03.2011 14:25
удаление по маске Сергей 2289 Microsoft Office Excel 0 01.10.2010 10:07
Перемещение и удаление файлов по маске. Putin-mode Помощь студентам 0 04.06.2010 15:39