[DSA] Домашно Trees and Traversals - 3 Задача


4
3.Define classes File { string name, int size } and Folder { string name, File[] files, Folder[] childFolders } and using them build a tree keeping all files and folders on the hard drive starting from C:\WINDOWS. Implement a method that calculates the sum of the file sizes in given subtree of the tree and test it accordingly. Use recursive DFS traversal.
 
Решение - цък
Тестове - цък
 
След като се намери rootFolder-а всички поддиректории се създават рекурсивно. В конструктора на Folder използвам DirectoryInfo, защото съдържа информация за вътрешните папки/файлове и това позволява рекурсивната инициализация на дървото. Търсенето на конкретен folder или обхождане за изчисляване на големина отново са с рекурсия. 
Не намерих начин да достъпя директориите, които windows е защитил.
 
Тестовете се правят върху директория, която съм създал в проекта, за да има повторяемост на всички машини на които се пусне.



Отговори



5

И аз не успях да достъпя директориите, които са защитени, за това като срещна такава хвърлям грешка, която прихващам, но вместо да я изпиша на конзолата я подминавам и така продължавам по-следващите папки. А смятам размера на файлове в под дърво като задам стартова папка и на каква дълбочина е под дървото.

Задачка.


от tankovski (2828 точки)


2

https://github.com/VGGeorgiev/DataStructures-Algorithms/tree/master/TreesAndTraversals/BuildDirectoriesTree
 

Всички методи съм ги написал като статични.

Като за начало метода, който ми строй дървото му подавам път към папката от която да почне и самата папка. Чрез DirectoryInfo пълня папката с файловете и папките в нея и рекурсивно добавят вътрешните папки и файлове.

Втория ми метод FindFolder намира папката в подадено дърво и име на търсената папка.

CalculateFilesSum смята сумата на всички файлове като обхождам дървото рекурсивно и връщам сумата на всички файлове.

Ако някой вижда нередности и места за подобрения ще се радвам да каже.


от VGeorgiev (2890 точки)


4

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

https://github.com/Polichronov/DefineClasesFile

 


от Al.polichronov (1567 точки)


1

Здравейте,

Това е моята реализация на домашното.

Създавам си необходимите класове.

За да взема директориите и файловете използвам съответно  Directory.GetDirectories и Directory.GetFiles.

Написах си един private метод GenerateFiles, който по подаден стрингов масив с пътища и имена на файлове ми създава файлови обекти. Първо го бях сложил в класа Folder, но размислих и го извадих.

За калкулиране на сумата си създадох рекурсивен метод в класа Folder. Първоначално беше статичен, но реших, че ще е по-добре директно през this да се достъпва.

За целите на тестовете си създадох примерна директория с няколко поддиректории и файлове.

Ще се радвам на всякакви препоръки и съвети!


от nikolaikolarov (2177 точки)


3

Решение.
Създавам си два класа File и Folder, като в Folder класа правя два метода AddFile приемащ име и размер на файл, и AddFolder приемащ име на папка.
В DirectoryTree класа по зададена RootDirectory и FilePattern извиквам рекурсивно метода CreateFolders, който чете файловете и папките по зададената папка и ако има папки или файлове обхожда файловте и създава в нашето дърво файлове и за всяка папка я създава и извиква рекурсивно отново метода CreateFolders.


от AsenVal (3487 точки)


1

Здравейте!

Написах задачата така, че да структурира във формата на дърво всички HDD-та на компютъра и да изкарва общата големина на файловете по HDD. Принтира и списък с директориите, до които не е позволен достъпът.

Source code.

 


от nencho83 (538 точки)


2

Решение

Задачата прилича много на предната - правя си глобална папка root и с DFS обхождам всички нейни папки и файлове като ги добавям.

Отделно всяка папка си има метод да изчисли големината на файловете в нея - рекурсивно си вика същия метод на всички подпапки + сумата на файловете в нея.


от dzhenko (3893 точки)


1

Аз съм заменил C:Windows с SpecialFolder.MyDocuments за да няма ядове с правата. Задачата я направих малко по ООП ориентирана (малко да се отсрамя за лошо си представяне на ООП изпита). Написах статия за тази задача, който иска може да я прочете тук или да види решението тук.


от dimo.petrof (2887 точки)