Loading...
Simooo93 avatar Simooo93 81 Точки

CSharp[Advanced][FilesAndStreams] Homework

Здравейте колеги,

 

показвам домашното си. Надявам се да е полезно на някои, както се надявам и да погледнете моето да дадете критики и това също да е полезно и за мен. Благодаря ви предварително.

1. OddLines

2. LineNumbers

3. WordsCount

4. CopyBinaryFile

5. SlicingFile

6. GzipStream

7. DirectoryTraversal

8. FullDirectoryTraversal

9. Disk

10. Paintball

11. CoupleFrequences

Тагове:
8
C# Advanced
bomman avatar bomman 43 Точки

Здравей мисля, че си пропуснал нещо в 5 задача.

Write a program that takes any file and slices it to n parts. Write the following methods:

  • Slice(string sourceFile, string destinationDirectory, int parts) - slices the given source file into n parts and saves them in destinationDirectory.
  • Assemble(List<string> files, string destinationDirectory) - combines all files into one, in the order they are passed, and saves the result in destinationDirectory.

 

1
03/10/2015 11:14:33
Simooo93 avatar Simooo93 81 Точки

Здравей,

благодаря за коментара, но не разбирам кое точно съм пропуснал. Имаш предвид, че не ми се вкарват като данни sourceFile и destinationFile ? 

Поздрави, Симо

0
bomman avatar bomman 43 Точки

Здравей Симо, по условие са ти дадени 2 метода и според тях трябва да си изградиш задачата. Това е моята мисъл.

0
Simooo93 avatar Simooo93 81 Точки

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

0
Lamms avatar Lamms 197 Точки

А правил ли си упражнението или някой друг, ако го е решавал, би ли си споделил решението?

 

Поздравления за решенията.

0
03/10/2015 14:59:05
kidroca avatar kidroca 117 Точки

Здравей, 

Ще споделя едно предложение тук понеже се натъкнах на това докато разглеждах задачите ти:

while (true)
{
	int bytesRead = partOfFile.Read(buffer, 0, buffer.Length);
	if (bytesRead == 0)
	{
	    break;
	}
	assembledFile.Write(buffer, 0, bytesRead);
}

Можеш да замениш този while(true) цикъл така:

int bytesRead;
while ((bytesRead = partOfFile.Read(buffer, 0, buffer.Length)) > 0)
{
	assembledFile.Write(buffer, 0, bytesRead);
}

Не само защото е по - кратко, но най - вече защото избягва твоа while(true)


И един коментар относно 8ма задача (Full Directory Traversal) относно този метод:

private static void DirectoriesTraversal(
	DirectoryInfo directorySelected, SortedDictionary<string, Dictionary<string, double>> extensions)
{
	DirectoryInfo[] subDirectories = directorySelected.GetDirectories();    
	int subDirectoriesUsed = subDirectories.Length;

	foreach (var file in directorySelected.GetFiles())
	{                  
		FileExtensionSorting(file, extensions);           
		while (subDirectoriesUsed > 0)
		{
		    foreach (var subDirectory in directorySelected.GetDirectories())
		    {                                        
		            DirectoriesTraversal(subDirectory, extensions);
		        subDirectoriesUsed--;
		    }
		}
	}
}

Имаш един foreach който минава през всички файлове в текущата директория, втре във него имаш вложен друг foreach който има за цел да обикаля вътрешните директории (while-ът го оставям на страна за сега) - структурирани така това означава че за всяко единично преминаване на външния foreach (за всеки file in directorySelected) всеки път ще изпълниш вложения foreach от начало до край. Има ли смисъл това да се повтаря след всеки файл? по - скоро не.

Вложеният foreach трябва да го изкараш наваън и да се изпълни след първия foreach , а този while също не върши никаква, защото foreach -a няма да спре докато не мине през всички директории - това му е работата т.е. това subDirectoriesUsed винаги ще е = 0 след края на този foreach.

Ето за какво ти говоря:

private static void DirectoriesTraversal(
	DirectoryInfo directorySelected, SortedDictionary<string, Dictionary<string, double>> extensions)
{
	foreach (var file in directorySelected.GetFiles())
	{                  
		FileExtensionSorting(file, extensions);           	    	
	}

	foreach (var subDirectory in directorySelected.GetDirectories())
	{                                        
	      DirectoriesTraversal(subDirectory, extensions);
	}
}

В случей че directorySelected.GetDirectories() не съдържа директории вторият foreach ще се пропусне и рекурсията започва да се връща назад.

На кратко foreach е цикъл който се ползва когато искаш да минеш през всички елементи от дадена колекция , в случея все едно заместваш for цикъл от 0 до length със foreach 

2
03/10/2015 19:27:42
Simooo93 avatar Simooo93 81 Точки

Здравей,

много ти благодаря за коментара беше ми изключително полезен, ако можех и два пъти щях да го харесам. Имах проблеми с рекурсията и непрестанно връщане на едно и също място и заради вложения foreach, който не се усетих да изнеса отвън като теб ми трябваше while, но сега като виждам е пълна глупост :D 

Поздрави,

Симо

1
03/10/2015 21:05:09
kidroca avatar kidroca 117 Точки

Споделям моите решения, ако някой случайно иска да си пусне нещо трябва да изтеглия целия solution защото ползвам една библиотечка която си нарпавих за оцветяване на домашните.

1
caMel avatar caMel 0 Точки

Този който е писал задачата PaintBall не се е съобразил че ако Damge-a е 0 не трябва да прави промяна по матрицата.

Преди циклите за промяна по матрицата трябва да има условие dmg != 0. 

Примерният input и резулутата след него е 5117;

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.