Inna twórczość > Platforma .NET
[C#] Obsługa błędów I/O
MajkeI:
Ok, sorry nie zauważyłem. Jak wrócę do domu to zrobię
Adanos:
--- Cytat: Sawik w 2015-05-26, 23:51 ---Avallach popraw mnie jeśli się mylę:
W czystym kodzie metoda odpowiada za określoną czynność np. kopiuj tekst, zapisz do pliku, dzięki czemu nazewnictwo jest proste i logiczne.
--- Koniec cytatu ---
Tak.
MajkeI:
Spoiler
--- Kod: ---using System;
using System.IO;
namespace Program {
class Program {
public static string GetDirectory() {
Console.WriteLine("Input directory");
return Console.ReadLine();
}
public static void ChangeFileNames (string directory) {
string[] filePaths;
if (!Directory.Exists(directory))
Console.WriteLine("Directory is incorrect!");
else {
filePaths = Directory.GetFiles(directory);
if (filePaths.Length == 0)
Console.WriteLine("No files in this directory!");
else
Console.WriteLine("Changed files: ");
for (int i = 0; i < filePaths.Length; i++) {
File.Move(filePaths[i], filePaths[i].ToUpper());
filePaths[i] = Path.GetFileName(filePaths[i]);
Console.WriteLine((i + 1) + ". " + filePaths[i]);
}
}
}
static void Main(string[] args) {
while (true) {
Console.Clear();
ChangeFileNames(GetDirectory());
Console.WriteLine("\n(Press ESCAPE to exit)");
if (Console.ReadKey().Key == ConsoleKey.Escape)
return;
}
}
}
}
--- Koniec kodu ---
Nie tworzyłem metody "Exit" bo musiałbym i tak stworzyć boola i sprawdzać go w Main(), a w samej metodzie ew sprawdzać sam klawisz, to byłoby raczej bez senusu. Podzieliłem tak - jest ok?
inż. Avallach:
Nie do końca. Sprawdzanie czy katalog istnieje i obsługa sytuacji kiedy nie istnieje zdecydowanie powinny być w metodzie GetDirectory, nie w metodzie ChangeFileNames. Pomyśl o tym tak: metoda GetDirectory "obiecuje" zwrócić katalog (ścieżkę do niego). Tymczasem u ciebie może zwrócić ścieżkę która do niczego nie prowadzi, może "kłamać"! Taki kod nie jest czysty.
Z kolei dlaczego metoda ChangeFileNames miałaby sprawdzać czy katalog istnieje? Przecież dostaje katalog na wejściu. To jej wymaganie wstępne - jeśli ktoś ją wywołał podając błędną ścieżkę, to wyjątek będzie jego "winą", nie tej metody.
MajkeI:
Tylko jak metoda GetDirectory ma jednocześnie zwracać katalog i true/false (czy istnieje czy nie) ?
Spoiler
--- Kod: --- public static string GetDirectory()
{
Console.WriteLine("Input directory");
string dir = Console.ReadLine();
if (!Directory.Exists(dir))
Console.WriteLine("Directory is incorrect!");
else
return dir;
return ""; //?????
}
--- Koniec kodu ---
Nawigacja
[#] Następna strona
Idź do wersji pełnej