О файловых менеджерах. Концепции функционирования.

Тема в разделе "WASM.ZEN", создана пользователем device, 25 дек 2007.

  1. device

    device Reflection

    Публикаций:
    0
    Регистрация:
    26 апр 2007
    Сообщения:
    1.198
    Адрес:
    RF
    Пишу файловый менеджер.
    Возникает вопрос: Каковы основные концепции разработки такой программы?

    Моё видение программы таково:

    сначала я описал структуру основных файловых операций в системе:
    Код (Text):
    1. public enum FileOperations {
    2.     FO_LIST_DIRECTORY, //--------- Чтение каталога
    3.     FO_TEXT_PREVIEW,   //--------- Просмотр текстового файла
    4.     FO_READ,          //---------- Чтение
    5.     FO_WRITE,         //---------- Запись
    6.     FO_PDF_PREVIEW,   //---------- Просмотр PDF файла
    7.     FO_DOWNLOAD,      //---------- Скачивание
    8.     FO_UPLOAD,        //---------- Загрузка на сервер
    9.     FO_HIDE,          //---------- Скрытие  
    10.     FO_SHOW,          //---------- Раскрытие
    11.     FO_DELETE,        //---------- Удаление
    12.     FO_CREATE,        //---------- Создание нового
    13.     FO_RENAME,        //---------- Переименование
    14.     FO_COPY,          //---------- Копирование
    15.     FO_MOVE,          //---------- Перемещение
    16.     FO_CREATE_DIRECTORY,//-------- Создание каталога
    17.     FO_CREATE_DIRS     //--------- Создание множества каталогов        
    18.    
    19. }
    Затем создал интерфейс, который будет слушать, что пытаются сделать с файлом(FileOperationsListener) и принимает решение о допустимости операции.
    Операции я разделил на 3 вида:

    public void processSingleOperation (FileOperations FOS);
    Это однозначная операция (удаление, создание, получение размера etc...)

    public void processDoubleOperation (FileOperations FOS, Object param);
    Операция с параметром (перемещение, копирование, переименование, чтение etc...)

    public void processMixedOperation (FileOperations[] FOS, Object[] params);
    Неопределенная операция (просмотр, диагностика, etc...)

    Если я иду не в ту сторону, то поправьте.
    Также существует класс FileEntity, который позволяет собирать о файле любую информацию в том числе его mime-тип, права доступа, значок, категорию.

    Что делать дальше - не знаю... Какие еще функции добавить?
     
  2. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    советую прочитать
    про VFS в Linux
    (концепции inode, dentry, file, superblock)
     
  3. kaspersky

    kaspersky New Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    3.006
    device
    присоединяюсь к ответу rei3er'а
    у тебя как-то все в кучу свалено. о символьных линках вообще ни слова ;)
    каким боком тут появился pfd и upload/download мне вообще непонятно....
    у тебя встроенный просмотрщик pdf будет? а ps уже не покажет?
    а граф. файлы? а html тоже не отрендерит? ты хочешь написать собственный
    манагер закачек, но... смысл? есть куча готовых и даже встроенных в браузеры.
    встроенный ftp-клиент как в FAR'е и MC - конечно, удобная штука, спору нет,
    но многие предпочитают юзать другие утилили...

    а если говорить кратко, то файловый менеджер должен поддерживать
    все операции над файлами, которые только поддеживает ось. как минимум.
    я не встретил у тебя просмотра атрибутов файла, изменение даты создания...
    это что же получается, если мне надо поменять атрибуты, я должен из твоего
    менеджера чмод вызывать?! так на фиг тогда он мне нужен такой...

    в принципе, можно просто переписать одну команду ls, сделав возможность
    перемещения курсора по списку файлов как это было сделано в ndos,
    и все очень рулило.
     
  4. device

    device Reflection

    Публикаций:
    0
    Регистрация:
    26 апр 2007
    Сообщения:
    1.198
    Адрес:
    RF
    Это часть проекта.
    Есть сервер, который слушает команды от клиента.
    Этот сервер сидит в каталоге ./network компа.
    В том каталоге есть подкаталоги (./Маркетинг ./Бухгалтерия ./Финансисты)

    Команда list_divisions, например выдает список подразделений (читает каталог network)

    В каждом каталоге - фамилии сотрудников

    Команда List_Users - Выводит список сотрудников в данном подразделении

    Команда send_file - Отправляет файл к сотруднику, recv_file - Принимает

    Задача состоит в написании такого клиента, который бы был НЕ ХУЖЕ чем InternetExplorer или Konqueror.
    Сервер поддерживает любые операции с файлами, при желании можно добавить новые.
    Вот я и спрашиваю, как вообще это пишется?

    На данном этапе клиент ругается матом:
    Код (Text):
    1. NullPointerException
    2. Ошибка: Указатель ссылается на пустое место.
     
  5. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    device
    а в чем трудность?
    если есть сервер, то он должен поддерживать определенный протокол передачи команд
    клиент будет транслировать пользовательские запросы в формат команд сервера
     
  6. kaspersky

    kaspersky New Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    3.006
    device
    > Задача состоит в написании такого клиента,
    > который бы был НЕ ХУЖЕ чем InternetExplorer или Konqueror.
    > Сервер поддерживает любые операции с файлами,
    > при желании можно добавить новые.
    > Вот я и спрашиваю, как вообще это пишется?
    никак это не пишется, а берется уже готовое. IE, например.
    ты пишешь http-proxy, который общаясь с сервером транслирует
    его ответы в html, чтобы юзер видел аля web-страничку,
    с разными элементами управления, посылающими ответы
    твоему http-proxy, который их транслирует в команды сервера.

    как-то я делал что-то очень отдаленно на это похожее...
    proxy, который позволяет работать с pop3/smtp протоколами через браузер.
    причем, абсолютно любой браузер, который нравится челу.

    вернее, я не совсем правильно выразился. это будет не http-proxy,
    это будет локальный web-сервер. т.е. в настройках браузера ничего
    прописывать не надо. просто набираешь в адресной строке адреса
    машины, где стоит этот сервер (соседний узел в локалке или твоя
    локальная машина) и все ;) работает на все 100%

    еще как-то писал такую же штуку для управления dsl-модемом
    который управлялся только через telnet и клиент, его купивший
    был страшно недоволен, что нет web-интерфейса...
     
  7. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.242
    device
    гммм..... а нафиг строфать с нуля, если есть куча готовых решений, кои можно адаптировать, если функционала не хватает?????
     
  8. device

    device Reflection

    Публикаций:
    0
    Регистрация:
    26 апр 2007
    Сообщения:
    1.198
    Адрес:
    RF
    Вот так щас это выглядит
     
  9. device

    device Reflection

    Публикаций:
    0
    Регистрация:
    26 апр 2007
    Сообщения:
    1.198
    Адрес:
    RF
  10. device

    device Reflection

    Публикаций:
    0
    Регистрация:
    26 апр 2007
    Сообщения:
    1.198
    Адрес:
    RF
    Блин!!!
    Ищу подходящую стену чтоб убиться.
    То что изображено на скриншоте отлично работает в Linux. Я даже прогресс бар прикрутил, если оперируем с большими файлами. Та же прога в Windows вместо имен отделов и сотрудников выводит какие-то иероглифы. Какой казел кодировками балуется? У меня аж руки опустились когда увидел:dntknw:
     
  11. device

    device Reflection

    Публикаций:
    0
    Регистрация:
    26 апр 2007
    Сообщения:
    1.198
    Адрес:
    RF
    А у меня еще вопрос:

    Можно ли соорудить такую структуру данных, типа бутылки?:) Ну, например, у нас есть файл очень большого размера. Его нужно передать на сервер. Возьмем буфер в n байт с пределом P и будем читать этот файл, заполняя структуру:

    data[n]
    |
    |
    |
    V
    data1[n++]
    |
    |
    |
    V
    data2... и так, пока не достигнем P, P+=n

    Чтобы потом извлечь, начиная с data2 ----->data[n]. Похоже на содержимое бутылки. Влили в определенном порядке - вылили наоборот:).
    Но тут возникает другой вопрос: как определить, что последовательность байт в буфере до вталкивания такая же как и после? Подозреваю, что можно привязать к последовательности дополнительные данные, но вот только как и какие...?
     
  12. ksu_ant

    ksu_ant New Member

    Публикаций:
    0
    Регистрация:
    28 сен 2005
    Сообщения:
    273
    Не могу понять, чем это от стека отличается...
     
  13. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    TCP/IP гарантирует это.
     
  14. device

    device Reflection

    Публикаций:
    0
    Регистрация:
    26 апр 2007
    Сообщения:
    1.198
    Адрес:
    RF
    Добавил функционал: При попытке копирования каталога выдается сообщение: Это каталог. Создать из него архив?
     
  15. device

    device Reflection

    Публикаций:
    0
    Регистрация:
    26 апр 2007
    Сообщения:
    1.198
    Адрес:
    RF
    Почему при передаче файла с русским именем (русские буквы в имени), размер конечного файла - 0 байт, а если буквы латинские - то все нормально, хотя конечный файл тоже по-русски назван.