میخواهیم برنامهای بنویسیم که با کمک آن بتوانیم فایلهای خود را مدیریت کنیم.
#### نیازهایی که باید این فایل منیجر برطرف کند عبارتند از:
* ساخت یک پوشه جدید
* ساخت یک فایل جدید
* جستجو کردن بر اساس نام فایل
* حذف فایل
* بازیابی فایل
با توجه به نیازمندیهایی که در بالا گفته شد، یک کلاس با نام `FileManager` تعریف کنید که همه متدهای جدول زیر را طبق رفتار توضیح داده شده پیادهسازی کند.
```python source.py
class FileManager:
def find(self, name, address):
pass
def create_file(self, name, address):
pass
def create_dir(self, name, address):
pass
def delete(self, name, address):
pass
def restore(self, name):
pass
```
| رفتار |خروجی| متد |
|:------------------:|:-------:|:-----------:|
|یک پوشه جدید با نام `name` در آدرس `address` می سازد.|`-`| `create_dir(name, address)` |
|یک فایل جدید با نام `name` در آدرس `address` ایجاد می کند .|`-`| `create_file(name, address)`|
|یک فایل با نام `name` را از آدرس `address` حذف می کند .|`-`| `delete(name, address)`|
|آدرس تمام فایل های با نام `name` را از آدرس `address` **به بعد** برمیگرداند|`List`| `find(name, address)`|
|فایل با نام `name` را بازیابی می کند.|`-`| `restore(name)`|
## توضیحات بیشتر
* در متد `create_dir` در صورت عدم وجود پوشه باید پوشهای جدید ساخته شود در غیر این صورت نباید هیچ اتفاقی بیفتد!
* در متد `create_file` در صورت عدم وجود فایل باید فایلی جدید ساخته شود در غیر این صورت نباید هیچ اتفاق دیگری بیفتد!
* در متد `delete` در صورت عدم وجود فایل نباید هیچ اتفاقی بیفتد!
* در متد `find` باید یک لیست از تمام آدرسها برگردانده شود و در صورت عدم وجود فایلی با این نام، یک لیست خالی برگردانده شود. ترتیب این آدرسها اهمیتی ندارد.
* آدرسهای برگردانده شده از متد `find` باید از آدرس موجود در آرگومانها به بعد باشد (آدرس شامل خود آرگومان نیز میباشد).
.دقت شود که ممکن است فایلی در سطوح پایین تر از سطح اول نیز موجود باشد.
* متد `restore`
* فایل بازیابی شده باید در آدرس قبلی خود قرار گیرد.
* اگر چند فایل هم نام بصورت متوالی حذف شوند باید با هربار صدا زدن متد `restore` فایلها به صورت متوالی و با عکس ترتیب حذف، بازیابی شوند.
* باید در عمل حذف و بازیابی محتوای فایل حفظ شود.
* در صورت عدم وجود فایلی برای بازیابی نباید هیچ اتفاقی بیفتد.
* برای حل این سوال میتوانید هر فایل و یا پوشه دیگری که خواستید بسازید.
## نمونه
#### متدهای `create_dir` و `create_file`
```python source.py
fm = FileManager()
fm.create_dir('test', '.')
fm.create_dir('test1', 'test')
fm.create_dir('test2', 'test/test1/')
fm.create_file('test.txt', 'test')
fm.create_file('test.txt', 'test/test1')
fm.create_file('test.txt', 'test/test1/test2')
```
#### خروجی: باید پوشهها و فایلهای زیر ایجاد شوند.
```python terminal terminal
test
├── test1
│ ├── test2
│ │ └── test.txt
│ └── test.txt
└── test.txt
```
#### متد `find`
```python source.py
print(fm.find('test.txt', 'test'))
```
#### خروجی
```python terminal terminal
['test/test.txt', 'test/test1/test.txt', 'test/test1/test2/test.txt']
```
#### متدهای `delete` و `restore`
```python source.py
fm.delete('test.txt', 'test')
fm.delete('test.txt', 'test/test1/')
fm.delete('test.txt', 'test/test1/test2')
fm.restore('test.txt')
fm.restore('test.txt')
```
#### خروجی
```python terminal terminal
test
├── test1
├── test2
│ └── test.txt
└── test.txt
```
## نکات
+ میتوانید فایل اولیه این سوال را از [این لینک](/problemset/assignments/4367/download_problem_initial_project/21207/) دریافت کنید.
+ غیر از متد `find` که در آن باید لیست فایلهای مورد نظر را بازگردانید، در بقیهی متدها نیازی به چاپ یا برگرداندن مقداری نیست.
## نحوه ارسال
شما باید کلاس `FileManager` موجود در فایل `source.py` را تکمیل و سپس این فایل را ارسال کنید.