georgidimov / FileSystem

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Финален проект за курса "Структури от данни"

СУ ФМИ - Информационни системи

Файлова система

В рамките на този проект трябва да се разработи приложение, което създава и поддържа файлова система, която е съхранена в рамките на един файл. Най-просто казано, приложението ви трябва да позволява да се създаде нов файл, в който можете да добавяте и премахвате други файлове и директории.

Операциите, които приложението трябва да поддържа са:

Операции с директории:

  1. Създаване на нова директория;
  2. Добавяне на вече съществуваща директория (посочва се вече съществуваща директория от реалната файлова система и приложението ви трябва да я добави, заедно с цялото ѝ съдържание, във вашата файловата система);
  3. Експортиране на директория (избира се някоя от директориите във вашата файловата система и се казва къде да се експортира тя в реалната файлова система);
  4. Премахване на директория и всички съдържащи се в нея файлове и поддиректории;
  5. Преименуване на директория;
  6. Преместване на директория в друга директория;
  7. Копиране на директория и цялото ѝ съдържание в друга директория.
  8. Извеждане на информация за дадена директория от файловата система – трябва да се посочи списък на файловете и директориите в тази директория

Операции с файлове:

  1. Създаване на нов празен файл (с размер 0 байта);
  2. Добавяне на вече съществуващ файл (посочва се вече съществуващ файл от реалната файлова система и приложението ви трябва да го добави във вашата файловата система);
  3. Експортиране на файл (избира се файл и се казва къде да се експортира в реалната файлова система);
  4. Премахване на файл;
  5. Преименуване на файл;
  6. Преместване на файл в друга директория;
  7. Копиране на файл в друга директория.
  8. Извеждане на информация за файл (указва се файл и се извежда полезна информация за него, например реален размер, колко място заема във файловата система и т.н.)
  9. Добавяне на текст към файл (указва се файл и текст, който да се добави в неговия край)

Сами можете да изберете какъв интерфейс да реализирате за вашето приложение. Например приложението ви може да получава като вход от командния ред име на файл, в който се пази файловата система, след което да влиза в интерактивен режим, в който потребителят може да пише команди. Една сесия с такова приложение може да изглежда например така:

$ fs.exe myfs.dat
> myfs.dat loaded. Enter command (type "h" for help)

$ mkdir /home
> Created directory /home

$ mkdir /home/user
> Created directory /home/user

$ touch /home/user/.settings
> Created empty file .settings under /home/use

$ append "some text" /home/user/.settings
> Appended "some text" to .settings

$ import-file D:\sample-file /home/user/some-data
> Imported "sample-file" into /home/user with new name "some-data"

$ append "some more data" /home/user/some-data
> Appended "some more data" to some-data

$ copy /home/user/some-data /some-data
> Copied "some-data" into / as "some-data"

$ export /home/user/some-data D:\other-file
> Exported "some-data" into D:\ as "other-file"

$ move /home/user /home/renamed-user
> Moved directory "user" from /home into /home as "renamed-user"

$ dir /home
> Contents of /home
> <user>
> Total 1 item(s)

$ exit
> Bye!

Други

Когато приложението ви изпълнява описаните по-горе операции, то непрекъснато ще добавя и премахва информация във файловата система. Изберете подходящи механизми, който да направят операциите ефикасни откъм време и използвано пространство. Като минимум помислете за подходящ начин за организация на файловата система, който да позволява (1) операциите да протичат (относително) бързо и (2) да се оптимизира използваното от нея пространство.

About


Languages

Language:C++ 97.6%Language:QMake 2.4%Language:Shell 0.1%