Inna twórczość > Platforma .NET

[C#] Obsługa błędów I/O

<< < (2/5) > >>

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

[0] Indeks wiadomości

[#] Następna strona

[*] Poprzednia strona

Idź do wersji pełnej