Page 1 of 2

File System Library (FSL)

Posted: Thu Nov 05, 2015 4:02 pm
by paulcodeman
Библиотека позволяет выполнять такие операции как:
  • [*]Чтение данных (ф-ция

    Code: Select all

    fs.read(path)
    [/size] читает файл path и выделяет под размер этого файла область памяти, в регистре ECX содержится размер самого файла. Чтобы освободить память, достаточно вызвать free указав адрес области памяти.)
    [*]Удаление (ф-ция

    Code: Select all

    fs.remove(path)
    [/size] рекурсивно удаляет все элементы входящую директорию path и так же удаляет её)
    [*]Копирование (ф-ция

    Code: Select all

    fs.copy(path1,path2)
    [/size] осуществляет рекурсивное копирование из path1 в path2)
    [*]Перемещение (ф-ция

    Code: Select all

    fs.move(path1,path2)
    [/size] осуществляет рекурсивное перемещение из path1 в path2, в случае ошибки приостанавливается, те файлы которые не перенесли остаются в сохранности)
    [*]Получить размер файла/папки (ф-ция

    Code: Select all

    fs.get_size(path)
    [/size] осуществляет рекурсивное получение путем суммирования размеров файлов. Так же регистр ECX содержит кол-во папок, а EDX - файлов.)
    [*]Создание папки (ф-ция

    Code: Select all

    fs.make_dir(path)
    [/size])
    [*]Переименование файла/папки (ф-ция

    Code: Select all

    fs.rename(path,new_name)
    [/size] осуществляет переименование файла/папки имени в пути path на новое new_name, в случае ошибки приостанавливается, те файлы которые не перенесли остаются в сохранности, взаимодействует с ф-цией fs.move)
    [*]Получить кол-во файлов и папок в определенной директории (ф-ция

    Code: Select all

    fs.get_entries_count(path)
    [/size] возвращает кол-во файлов и папок в директории path, стоит отметить, возвращается только реальное кол-во без ./ и ../!)
    [*]Получить указатель на блок файлов папки (ф-ция

    Code: Select all

    fs.get_dir_info(path)
    [/size] возвращает блок данных)
Отдельно идет еще ф-ция fs.get_full_path(path), она преобразует путь в стандартный Windows формат определения пути.
Например:

Code: Select all

char *path = fs.get_full_path("file.txt");
то переменная path будет

Code: Select all

/путь к директории от куда запущен файл/file.txt
Если

Code: Select all

char *path = fs.get_full_path("/file.txt");
То

Code: Select all

/sys/file.txt
Все ф-ции описанные выше взаимодействуют с функцией fs.get_full_path, это сделано ради удобства.

Re: File System Library (FSL)

Posted: Thu Nov 05, 2015 4:34 pm
by Ray
Это по какой конвенции наименования для функции используется идентификатор в верхнем регистре? Переименование надо делать на уровне драйверов ФС.

Re: File System Library (FSL)

Posted: Thu Nov 05, 2015 4:50 pm
by paulcodeman
Ray wrote:Это по какой конвенции наименования для функции используется идентификатор в верхнем регистре? Переименование надо делать на уровне драйверов ФС.
Можно и на нижнем регистре, но для минимализации совпадений сделал на верхнем.
На счет переименовании это понятно, я в драйверах не очень. Да и сложно наверно, поэтому сделал такой вариант, может быть как временный, пока не появиться лучше.

Re: File System Library (FSL)

Posted: Thu Nov 05, 2015 6:08 pm
by Pathoswithin
Библиотека для файловых менеджеров? Планируешь перевести на неё Eolite?

Re: File System Library (FSL)

Posted: Thu Nov 05, 2015 6:24 pm
by paulcodeman
Pathoswithin wrote:Библиотека для файловых менеджеров? Планируешь перевести на неё Eolite?
Так точно.

Re: File System Library (FSL)

Posted: Thu Nov 05, 2015 6:40 pm
by paulcodeman
Сделал еще проще, теперь названия все через точку и в низ. регистре. Это дает возможность меньше запутаться.

Re: File System Library (FSL)

Posted: Thu Nov 05, 2015 8:25 pm
by e-andrew
Нужно сразу выбрать, использовать сокращения или полные названия (или mv и mkdir, или move и make_dir).
pavelyakov wrote:надо сейчас нормальные названия придумать, так как после буду присоединять с файловыми менеджерами
fs.delete можно переименовать в fs.remove. Так же думаю стоит добавить второй аргумент, который будет отвечать, стоит ли удалять это, если это директория (аналог ключа --force). И можно сделать обертку remove_dir, которая вызывает remove, у которого второй аргумент true.
fs.cut -> fs.move
fs.size -> fs.get_size
fs.mkdir -> fs.make_dir
fs.dir.load -> fs.get_dir_info
fs.dir.count -> fs.get_entries_count(dir_info)
fs.get.path -> fs.get_full_path
fs.rename - я не особо понимаю, чем он отличается от fs.cut/fs.move.
fs.dir.count и fs.dir.load - как по мне, лучше сделать так, чтобы fs.dir.load возвращал структуру (или в качестве аргумента лучше давать указатель на структуру), а уже методы для работы с этой структурой (например count) лучше применять сразу к структуре, чтобы было меньше лишних вызовов.

Code: Select all

string path = "..";
DirInfo* dir = new DirInfo;
fs.get_dir_info(dir, path);
printf("There are %d files in %s", fs.get_entries_count(dir), fs.get_full_path(path));

Re: File System Library (FSL)

Posted: Thu Nov 05, 2015 8:45 pm
by paulcodeman
e-andrew wrote:Нужно сразу выбрать, использовать сокращения или полные названия (или mv и mkdir, или move и make_dir).
pavelyakov wrote:надо сейчас нормальные названия придумать, так как после буду присоединять с файловыми менеджерами
fs.delete можно переименовать в fs.remove. Так же думаю стоит добавить второй аргумент, который будет отвечать, стоит ли удалять это, если это директория (аналог ключа --force). И можно сделать обертку remove_dir, которая вызывает remove, у которого второй аргумент true.
fs.cut -> fs.move
fs.size -> fs.get_size
fs.mkdir -> fs.make_dir
fs.dir.load -> fs.get_dir_info
fs.dir.count -> fs.get_entries_count(dir_info)
fs.get.path -> fs.get_full_path
fs.rename - я не особо понимаю, чем он отличается от fs.cut/fs.move.
fs.dir.count и fs.dir.load - как по мне, лучше сделать так, чтобы fs.dir.load возвращал структуру (или в качестве аргумента лучше давать указатель на структуру), а уже методы для работы с этой структурой (например count) лучше применять сразу к структуре, чтобы было меньше лишних вызовов.

Code: Select all

string path = "..";
DirInfo* dir = new DirInfo;
fs.get_dir_info(dir, path);
printf("There are %d files in %s", fs.get_entries_count(dir), fs.get_full_path(path));
Отлично. Теперь более понятнее. На счет структуры подумаю как лучше сделать.

Re: File System Library (FSL)

Posted: Fri Nov 06, 2015 9:40 pm
by e-andrew
Почему ты не хочешь открыть исходники?

Re: File System Library (FSL)

Posted: Fri Nov 06, 2015 9:54 pm
by paulcodeman
e-andrew wrote:Почему ты не хочешь открыть исходники?
они слишком специфичные xD

Re: File System Library (FSL)

Posted: Sat Nov 07, 2015 10:03 pm
by punk_joker
а вызов callback функции в копировании и перемещении есть? Нужно для прогрессбара.

Re: File System Library (FSL)

Posted: Sat Nov 07, 2015 10:56 pm
by paulcodeman
punk_joker wrote:а вызов callback функции в копировании и перемещении есть? Нужно для прогрессбара.
Как раз об этом и думаю сделать.

Re: File System Library (FSL)

Posted: Sun Nov 08, 2015 6:15 pm
by punk_joker
По поводу fs.get_entries_count, она возвращает количисве файлов, или файлов и директорий?

Re: File System Library (FSL)

Posted: Sun Nov 08, 2015 6:47 pm
by paulcodeman
punk_joker wrote:По поводу fs.get_entries_count, она возвращает количисве файлов, или файлов и директорий?
файлов и директорий в определенной папке

Re: File System Library (FSL)

Posted: Sun Nov 08, 2015 6:56 pm
by punk_joker
Можешь добавить для нее параметры? Чтобв считало количество файлов и директорий, только директории, и только файлы?