Форум программистов, компьютерный форум, киберфорум
Rust
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/9: Рейтинг темы: голосов - 9, средняя оценка - 5.00
-6 / 2 / 1
Регистрация: 14.08.2013
Сообщений: 80

Удалить файл, занятый(открытый) другим процессом

16.02.2021, 15:39. Показов 2209. Ответов 5

Студворк — интернет-сервис помощи студентам
Мне необходимо удалить файл, занятый(открытый) другим процессом. Пытаюсь найти информацию и безуспешно, буду очень благодарен, если кто знает.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.02.2021, 15:39
Ответы с готовыми решениями:

Как удалить файл, занятый другим процессом?
При работе 1С в каталоге пользоателя создается файл 1Cv7.LCK. При сбое этот файл остается занятым (стандартными средствами не удаляется)....

Как удалить файл, занятый другим процессом?
Уважаемые Гуру! Файл 1.gdb используется разными программами с разных компьютеров. На выделенном компьютере требуется перезаписать...

StreamReader и открытый (другим процессом) файл
Делаю программу, которая каждую секунду заглядывает в файл console.log, который использует игра. Код крашится, когда игра запущена, хоть и...

5
Модератор
 Аватар для Curry
5158 / 3482 / 536
Регистрация: 01.06.2013
Сообщений: 7,549
Записей в блоге: 9
16.02.2021, 20:37
Задача состоит из трёх частей.
1. Узнать как с помощью WinAPI определить процессы открывшие файл.
2. Переписать код примеров с С на rust используя крейты-обёртки над WinAPI, вроде https://docs.rs/winapi/0.3.9/w... index.html
3. Поприбивать эти процессы. После чего можно будет удалить файл обычным способом.
0
Заблокирован
21.02.2021, 21:56
Это ограничение ОС.

Но в целом символично, что выше предложили "поприбивать эти процессы". Уровень.
0
Заблокирован
21.02.2021, 22:36
Цитата Сообщение от cloun1902 Посмотреть сообщение
Это ограничение ОС.
Но в целом символично, что выше предложили "поприбивать эти процессы". Уровень
Ну а что вы еще хотите услышать? Причём тут Rust вообще, если речь идёт об API конкретной ОС. Вам с эти API и нужно взаимодействовать.
Да и как вы хотите удалить файл, если он другим процессом занят, не убивая процесса который этот файл уже использует? Для этого у вашего процесса по отношению к файлу должен быть более выскочи приоритет.
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
23.02.2021, 14:15
DuplicateHandle с закрытием исходного дескриптора DUPLICATE_CLOSE_SOURCE.
Как найти непосредственно handle файла? Придется написать еще строк 200.

Пример можно найти поиском по гитхабу по слову forcedel
0
-6 / 2 / 1
Регистрация: 14.08.2013
Сообщений: 80
23.02.2021, 18:14  [ТС]
Есть вариант написанный на си, но я застрял на функции ds_rename_handle.
Вот что уже есть: ds_open_handle и ds_deposite_handle:

Rust
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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
use std::{error, io, ptr};
use std::path::Path;
use winapi::um::winnt::HANDLE;
 
pub struct FileHandle(HANDLE);
 
impl FileHandle {
    pub fn open(path: &Path) -> Result<FileHandle, Box<error::Error>> {
        use winapi::um::{
            fileapi::{CreateFileW, OPEN_EXISTING},
            handleapi::INVALID_HANDLE_VALUE,
            winnt::{FILE_ATTRIBUTE_NORMAL, DELETE},
        };
 
        unsafe {
            let handle = CreateFileW(
                to_u16s(path.as_os_str()).as_ptr(),
                DELETE,
                0,
                ptr::null_mut(),
                OPEN_EXISTING,
                FILE_ATTRIBUTE_NORMAL,
                ptr::null_mut(),
            );
 
            if handle == INVALID_HANDLE_VALUE {
                return Err(io::Error::new(
                    io::ErrorKind::Other,
                    format!(
                        "Failed to create file handle: {}",
                        get_last_error_message()?
                    ),
                ).into());
            }
 
            Ok(FileHandle(handle))
        }
    }
 
    pub fn delete(&self) -> Result<(), Box<error::Error>> {
        use std::mem;
        use winapi::shared::minwindef::{DWORD, FALSE, LPVOID, TRUE};
        use winapi::um::{
            fileapi::{SetFileInformationByHandle, FILE_DISPOSITION_INFO},
            minwinbase::FileDispositionInfo,
        };
 
        unsafe {
            let mut info = FILE_DISPOSITION_INFO { DeleteFile: TRUE as u8 };
            let result = SetFileInformationByHandle(
                self.0,
                FileDispositionInfo,
                &mut info as *mut _ as LPVOID,
                mem::size_of::<FILE_DISPOSITION_INFO>() as DWORD,
            );
 
            if result == FALSE {
                return Err(io::Error::new(
                    io::ErrorKind::Other,
                    format!(
                        "Failed to mark file for deletion: {}",
                        get_last_error_message()?
                    ),
                ).into());
            }
        }
 
        Ok(())
    }
}
 
pub fn to_u16s<S: AsRef<OsStr>>(s: S) -> Vec<u16> {
    use std::iter::once;
    s.as_ref().encode_wide().chain(once(0u16)).collect()
}
Мне не понятны функции RtlSecureZeroMemory, RtlCopyMemory и макрос #define DS_STREAM_RENAME L":wtfbbq"
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.02.2021, 18:14
Помогаю со студенческими работами здесь

StreamReader не может открыть файл, открытый на запись другим процессом
Сабж. Как обойти? :help:

Как открыть файл для чтения, уже открытый другим процессом
Допустим, есть файл &quot;debug.log&quot;, открытый процессом такой-то игры. мне надо его открыть для чтения строк вот код как я это делаю...

Удалить файл, который блокирован другим процессом
Работаю со сканером, через WIA, по нажатию кнопки происходит сканирование изображение private void Scan_Click(object sender,...

Как удалить файл, который занят другим процессом
Не могу удалить текстовой файл. Команда выглядит вот так My.Computer.FileSystem.DeleteFile(filepath &amp; &quot;\&quot; &amp;...

Как удалить файл который занят другим процессом?
Все Здрасте! Уважаемые такая проблема, облазил весь интернет не нашел подходящего решения. Пишу сюда в надежде получить правильный ответ. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru