В рамките на този проект трябва да се разработи приложение, което създава и поддържа файлова система, която е съхранена в рамките на един файл. Най-просто казано, приложението ви трябва да позволява да се създаде нов файл, в който можете да добавяте и премахвате други файлове и директории.
Операциите, които приложението трябва да поддържа са:
- Създаване на нова директория;
- Добавяне на вече съществуваща директория (посочва се вече съществуваща директория от реалната файлова система и приложението ви трябва да я добави, заедно с цялото ѝ съдържание, във вашата файловата система);
- Експортиране на директория (избира се някоя от директориите във вашата файловата система и се казва къде да се експортира тя в реалната файлова система);
- Премахване на директория и всички съдържащи се в нея файлове и поддиректории;
- Преименуване на директория;
- Преместване на директория в друга директория;
- Копиране на директория и цялото ѝ съдържание в друга директория.
- Извеждане на информация за дадена директория от файловата система – трябва да се посочи списък на файловете и директориите в тази директория
- Създаване на нов празен файл (с размер 0 байта);
- Добавяне на вече съществуващ файл (посочва се вече съществуващ файл от реалната файлова система и приложението ви трябва да го добави във вашата файловата система);
- Експортиране на файл (избира се файл и се казва къде да се експортира в реалната файлова система);
- Премахване на файл;
- Преименуване на файл;
- Преместване на файл в друга директория;
- Копиране на файл в друга директория.
- Извеждане на информация за файл (указва се файл и се извежда полезна информация за него, например реален размер, колко място заема във файловата система и т.н.)
- Добавяне на текст към файл (указва се файл и текст, който да се добави в неговия край)
Сами можете да изберете какъв интерфейс да реализирате за вашето приложение. Например приложението ви може да получава като вход от командния ред име на файл, в който се пази файловата система, след което да влиза в интерактивен режим, в който потребителят може да пише команди. Една сесия с такова приложение може да изглежда например така:
$ 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) да се оптимизира използваното от нея пространство.