Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
 Прерывание CopyFile  [new]
m52
Member

Откуда:
Сообщений: 714
Здравствуйте,

Копирую файл с помощью CopyFile. В отличии от функции CopyFileEx, прервать CopyFile нельзя, но я хочу использовать именно CopyFile. Чтобы можно было прервать процесс копирования, я обернул ф-цию CopyFile в отдельный поток Thread и в случае отмены копирования просто уничтожаю Thread. Таким образом процесс копирования прерывается.

Проблема: при уничтожении Thread копируемый файл остается заблокированным. С файлом ничего нельзя сделать (ни удалить, ни переименовать), пишет что он занят другим приложением. Как не выгружая программу прибить поток, чтобы копируемый файл стал свободным?
27 дек 18, 19:40    [21775193]     Ответить | Цитировать Сообщить модератору
 Re: Прерывание CopyFile  [new]
Aleksandr Sharahov
Member

Откуда: Москва
Сообщений: 1741
- Доктор, когда я вот вот так вот делаю у меня болит

- А вы вот вот так вот не делайте
27 дек 18, 20:05    [21775219]     Ответить | Цитировать Сообщить модератору
 Re: Прерывание CopyFile  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 47534

С прошлой аналогичной темы так ничему и не научился? Своё "хочу использовать именно
CopyFile" засунь куда подальше, наступи на горло собственной песне, подави ЧСВ и таки
используй CopyFileEx.

Posted via ActualForum NNTP Server 1.5

27 дек 18, 20:05    [21775220]     Ответить | Цитировать Сообщить модератору
 Re: Прерывание CopyFile  [new]
m52
Member

Откуда:
Сообщений: 714
Спасибо за типовые советы, забыл написать, чтобы CopyFileEx не предлагали.
27 дек 18, 20:12    [21775228]     Ответить | Цитировать Сообщить модератору
 Re: Прерывание CopyFile  [new]
Соколинский Борис
Member

Откуда: Москва
Сообщений: 9814
m52,
Перезапустить свою программу, именно она и держит файл.
Делаешь дамп всей памяти, перезапускаешь и восстанавливаешь.
Второй вариант - влезть в ядро винды и добраться до таблицы залоченных файлов.
27 дек 18, 20:33    [21775240]     Ответить | Цитировать Сообщить модератору
 Re: Прерывание CopyFile  [new]
Фэйтл Эра
Member

Откуда:
Сообщений: 627
m52,

милейший, а почему вы новые темы создаете, а не продолжаете старые?
Вы тролль.
27 дек 18, 20:34    [21775241]     Ответить | Цитировать Сообщить модератору
 Re: Прерывание CopyFile  [new]
ma1tus
Member

Откуда:
Сообщений: 666
m52
Спасибо за типовые советы, забыл написать, чтобы CopyFileEx не предлагали.
Фэйтл Эра
m52,
Вы тролль.
"Не толстый, а упитанный"(ц).
27 дек 18, 21:07    [21775256]     Ответить | Цитировать Сообщить модератору
 Re: Прерывание CopyFile  [new]
X-Cite
Member

Откуда: Минск
Сообщений: 1388
Используя copyfile с прибитием потока невозможно освобождение ресурсов. Если ресурсы освободить нельзя то и файл будет заблокирован до закрытия процесса. Ваше пожелание невозможно выполнить.
27 дек 18, 21:46    [21775274]     Ответить | Цитировать Сообщить модератору
 Re: Прерывание CopyFile  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 10926
m52,

Здесь смотрели? Или здесь?
27 дек 18, 22:00    [21775279]     Ответить | Цитировать Сообщить модератору
 Re: Прерывание CopyFile  [new]
makhaon
Member

Откуда: A galaxy far far away
Сообщений: 3227
_Vasilisk_,

он 2 года уже с этим мучается
27 дек 18, 22:24    [21775290]     Ответить | Цитировать Сообщить модератору
 Re: Прерывание CopyFile  [new]
makhaon
Member

Откуда: A galaxy far far away
Сообщений: 3227
m52,

за два года можно написать свою CopyFile :) с бустом и исключениями (на самом деле там работы на час максимум).
27 дек 18, 22:30    [21775296]     Ответить | Цитировать Сообщить модератору
 Re: Прерывание CopyFile  [new]
GunSmoker
Member

Откуда:
Сообщений: 3109
Жёваный крот.

А нельзя было зайти в CopyFile и увидеть, что она просто вызывает CopyFileEx с обнулёнными дополнительными параметрами, а последний параметр CopyFile преобразуется в флаг COPY_FILE_FAIL_IF_EXISTS??

Kernel32.CopyFile:
mov edi,edi
push ebp
mov ebp,esp
xor eax,eax
cmp [ebp+$10],eax
setnz al
push eax
xor eax,eax
push eax
push eax
push eax
push dword ptr [ebp+$0c]
push dword ptr [ebp+$08]
call $73b77110 // Kernel32.CopyFileEx
pop ebp
ret $000c
27 дек 18, 22:37    [21775298]     Ответить | Цитировать Сообщить модератору
 Re: Прерывание CopyFile  [new]
Фэйтл Эра
Member

Откуда:
Сообщений: 627
X-Cite
Используя copyfile с прибитием потока невозможно освобождение ресурсов. Если ресурсы освободить нельзя то и файл будет заблокирован до закрытия процесса. Ваше пожелание невозможно выполнить.

Можно запускать копифайл в отдельном приложении. И у бивать не тред, а процесс. Костылики, на счастье топикстартеру.
27 дек 18, 22:46    [21775305]     Ответить | Цитировать Сообщить модератору
 Re: Прерывание CopyFile  [new]
makhaon
Member

Откуда: A galaxy far far away
Сообщений: 3227
Фэйтл Эра,

можно вообще 'copy' в консоли вызывать
28 дек 18, 00:22    [21775344]     Ответить | Цитировать Сообщить модератору
 Re: Прерывание CopyFile  [new]
white_nigger
Member

Откуда: Тула
Сообщений: 2080
GunSmoker
А нельзя было зайти в CopyFile и увидеть, что она просто вызывает CopyFileEx с обнулёнными дополнительными параметрами, а последний параметр CopyFile преобразуется в флаг COPY_FILE_FAIL_IF_EXISTS??
От ведь стервец! Всю интригу ТС-у обломал! Картинка с другого сайта.
28 дек 18, 01:34    [21775365]     Ответить | Цитировать Сообщить модератору
 Re: Прерывание CopyFile  [new]
Фэйтл Эра
Member

Откуда:
Сообщений: 627
white_nigger
GunSmoker
А нельзя было зайти в CopyFile и увидеть, что она просто вызывает CopyFileEx с обнулёнными дополнительными параметрами, а последний параметр CopyFile преобразуется в флаг COPY_FILE_FAIL_IF_EXISTS??
От ведь стервец! Всю интригу ТС-у обломал! Картинка с другого сайта.
ТС пофиг, ему это уже говорили.
28 дек 18, 02:29    [21775371]     Ответить | Цитировать Сообщить модератору
 Re: Прерывание CopyFile  [new]
Beltar
Member

Откуда:
Сообщений: 199
https://www.gunsmoker.ru/2008/10/x-y-z.html

Да и автор этой саги, смотрю, тоже здесь.
28 дек 18, 09:23    [21775443]     Ответить | Цитировать Сообщить модератору
 Re: Прерывание CopyFile  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 29938

пользуй SHFileOperation

Posted via ActualForum NNTP Server 1.5

28 дек 18, 15:07    [21775828]     Ответить | Цитировать Сообщить модератору
 Re: Прерывание CopyFile  [new]
YuRock
Member

Откуда: Донецк
Сообщений: 3903
Соколинский Борис
m52,
Перезапустить свою программу, именно она и держит файл.
Делаешь дамп всей памяти, перезапускаешь и восстанавливаешь.
Второй вариант - влезть в ядро винды и добраться до таблицы залоченных файлов.

Ну зачем так сложно.
Можно написать свою функцию CopyFile, в ней - вызывать CopyFileEx.
И дальше можно спокойно использовать эту CopyFile, которую уже можно прервать. Проблема решена ;)
28 дек 18, 18:09    [21775983]     Ответить | Цитировать Сообщить модератору
 Re: Прерывание CopyFile  [new]
Соколинский Борис
Member

Откуда: Москва
Сообщений: 9814
YuRock
Ну зачем так сложно...
Мы не ищем легких путей.
ТС будет чем заняться, у нас повод повеселиться, лепота...
28 дек 18, 18:51    [21776007]     Ответить | Цитировать Сообщить модератору
 Re: Прерывание CopyFile  [new]
Gator
Member

Откуда: Москва
Сообщений: 14270
Соколинский Борис,

Привет, дорогой. Мне кажется, от такого веселья бужущее ужасно, отнюдь, не лепота...
28 дек 18, 23:27    [21776106]     Ответить | Цитировать Сообщить модератору
 Re: Прерывание CopyFile  [new]
Соколинский Борис
Member

Откуда: Москва
Сообщений: 9814
Gator,
Привет-привет, с наступающим!

Save tomorrow for tomorrow, think about today instead. (c)
29 дек 18, 21:24    [21776665]     Ответить | Цитировать Сообщить модератору
Все форумы / Delphi Ответить