Как удалить не пустую папку

MrBidloKoder

Известный
Автор темы
423
249
Версия MoonLoader
.027.0-preview
Добрый вечер или день. У кого как. Короче, мне нужно удалить папку в config c файлами внутри.
Lua:
lfs.rmdir (dirname)
или же
Lua:
ffi.cdef("int RemoveDirectoryA(const char* lpPathName);")
 local RemoveDirectoryA = ffi.C.RemoveDirectoryA

не подходит. Как я понял, они удаляют пустые папки. А можно как-то удалить НЕ пустые папки? Если да, то как.
 

ImPasha

Software Developer & System Administrator
Друг
1,788
2,141
зы. есть функа на удаление файла через ффи?
Почему бы не использовать os.remove для удаления файла?
Lua:
ffi.cdef("int DeleteFileA(const char* lpFileName);")
local DeleteFileA = ffi.C.DeleteFileA
 
  • Нравится
Реакции: Rei

Hatiko

Известный
Проверенный
1,502
620
Использовать команду для командной строки, если не париться с удаление файлов

Lua:
os.execute("rd /s /q [путь]")
--[[
где /s - параметр, отвечающий за удаление всего каталога в т.ч. и файлов
 /q - параметр, позволяющий удалить без предварительного подтверждения
Пример:
os.execute("rd /s /q D:\\GTA\\moonloader\\folderForRemove")
]]
 

Tema05

Известный
1,471
435
Использовать команду для командной строки, если не париться с удаление файлов

Lua:
os.execute("rd /s /q [путь]")
--[[
где /s - параметр, отвечающий за удаление всего каталога в т.ч. и файлов
/q - параметр, позволяющий удалить без предварительного подтверждения
Пример:
os.execute("rd /s /q D:\\GTA\\moonloader\\folderForRemove")
]]
Эта функция сворачивает игру.
 

MrBidloKoder

Известный
Автор темы
423
249
можешь попробовать через os.execute простой консольной командой удалять

зы. есть функа на удаление файла через ффи?
Использовать команду для командной строки, если не париться с удаление файлов

Lua:
os.execute("rd /s /q [путь]")
--[[
где /s - параметр, отвечающий за удаление всего каталога в т.ч. и файлов
/q - параметр, позволяющий удалить без предварительного подтверждения
Пример:
os.execute("rd /s /q D:\\GTA\\moonloader\\folderForRemove")
]]
Эта функция сворачивает игру. Предлагайте через ffi пожалуйста
Возможно я скажу гениальную вещь, но почему бы сначала не удалить файлы в папке, а потом и саму папку?
лень
 

ImPasha

Software Developer & System Administrator
Друг
1,788
2,141
Lua:
ffi.cdef("int RemoveDirectoryA(const char* lpPathName);")
local RemoveDirectoryA = ffi.C.RemoveDirectoryA
Этот вариант должен работать, возможно у процесса не хватает прав на выполнение. Игра с правами администратора запущена, нет ли в папке файлов, которые в данный момент запущены и не могут быть удалены из-за этого?
 

Tema05

Известный
1,471
435
Немного погуглив нашёл вот это.

Lua:
local lfs = require('lfs')

local deletedir
deletedir = function(dir)
    for file in lfs.dir(dir) do
        local file_path = dir..'/'..file
        if file ~= "." and file ~= ".." then
            if lfs.attributes(file_path, 'mode') == 'file' then
                os.remove(file_path)
                print('remove file',file_path)
            elseif lfs.attributes(file_path, 'mode') == 'directory' then
                print('dir', file_path)
                deletedir(file_path)
            end
        end
    end
    lfs.rmdir(dir)
    print('remove dir',dir)
end


deletedir('tmp')
Этот вариант должен работать, возможно у процесса не хватает прав на выполнение. Игра с правами администратора запущена, нет ли в папке файлов, которые в данный момент запущены и не могут быть удалены из-за этого?
У меня эта функция не удаляла даже папку с пустой папкой внутри. Прав думаю более чем достаточно, учитываю то что lua скрипт как раз создаёт эту папку с файлами.
 

ImPasha

Software Developer & System Administrator
Друг
1,788
2,141
У меня эта функция не удаляла даже папку с пустой папкой внутри. Прав думаю более чем достаточно, учитываю то что lua скрипт как раз создаёт эту папку с файлами.
Да, я сейчас глянул документацию от MS, эта функция действительно удаляет только полностью пустые директории.