Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в эту темуОткрыть новую тему
> Можно ли получить параметр размера файла? (lua)
фонарик
сообщение 4.6.2021, 19:58
Сообщение #1


****

Apprentice
Сообщений: 145
Регистрация: 23.11.2011
Группа: Пользователи
Наличность: 0
Пользователь №: 14.305



Подскажите, пожалуйста, кто знает, как узнать размер файла? Всю справку перерыл, не нашел (IMG:style_emoticons/default/read.gif)
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 5.6.2021, 1:40
Сообщение #2


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26702
Пользователь №: 16.971
Возраст: 29



Узнать размер файла
Код
--lua
local ffi = require("ffi")
local GENERIC_READ = 0x80000000
local OPEN_EXISTING = 3
local INVALID_HANDLE_VALUE = -1
ffi.cdef[[ unsigned long GetFileSize(int  hFile, unsigned long* lpFileSizeHigh);
           int CreateFileA(const char* lpFileName, unsigned long dwDesiredAccess, unsigned long dwShareMode, int lpSecurityAttributes,
           unsigned long dwCreationDisposition, unsigned long dwFlagsAndAttributes, int hTemplateFile);
           bool CloseHandle(int hObject);
]]

function get_file_size(file_name)
    local hFile = ffi.C.CreateFileA(file_name, GENERIC_READ, 0, 0, OPEN_EXISTING, 0, 0)
    if hFile == INVALID_HANDLE_VALUE then
        log('Файл не открылся')
        return nil
    end
    local size_file = ffi.C.GetFileSize(hFile, nil)
    ffi.C.CloseHandle(hFile)
    return size_file
end

local result = get_file_size([[C:\Windows\notepad.exe]])   -- размер файла
log (result)
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
sutra
сообщение 5.6.2021, 16:47
Сообщение #3


*******

Adept
Сообщений: 923
Регистрация: 10.8.2018
Группа: Пользователи
Наличность: 0
Пользователь №: 19.007



cirus дал очень хороший пример. Сам сейчас использую только низкий уровень по функциям работы с файлами. Но до недавнего времени использовал вот такой способ.
--lua
local arr,count=dir([[C:\Windows]],"notepad.exe","norecursion")
log(arr[1][5])

5-й элемент содержит размер файла. Подробнее по команде dir смотрите справку.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
фонарик
сообщение 6.6.2021, 19:56
Сообщение #4


****

Apprentice
Сообщений: 145
Регистрация: 23.11.2011
Группа: Пользователи
Наличность: 0
Пользователь №: 14.305



Ребята, спасибо вам огромное. Буду пробовать оба примера для своей задачи. У меня огромный текстовый список файлов, нужно сверить данные размера из списка с текущим положением дел (IMG:style_emoticons/default/smile.gif) И обновить их в списке если они неверные.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия | Версия для КПК Сейчас: 19.4.2024, 8:32
Designed by Nickostyle