Inna twórczość > Platforma .NET

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

<< < (3/5) > >>

Adanos:

--- Cytuj ---Tylko jak metoda GetDirectory ma jednocześnie zwracać katalog i true/false (czy istnieje czy nie) ?
--- Koniec cytatu ---
Metoda GetDirectory ma zwracać tylko katalog, ewentualnie nulla lub pusty napis. Czy katalog istnieje lub nie, sprawdzasz za pomocą Directory.Exists(dir). Nie komplikuj sobie życia.

MajkeI:
Tak, mam to w metodzie. Ale jeśli katalog jest nieprawidłowy to i tak przejdzie dalej, do ChangeFileNames() i wywali wtedy błąd

--- Kod: ---ChangeFileNames(GetDirectory());

--- Koniec kodu ---

Chyba, że tak?

--- Kod: ---using System;
using System.IO;

namespace Program
{
    class Program
    {
        public static void GetDirectory()
        {
            Console.WriteLine("Input directory");
            string dir = Console.ReadLine();

            if (!Directory.Exists(dir))
                Console.WriteLine("Directory is incorrect!");
            else
                ChangeFileNames(dir);
        }
        public static void ChangeFileNames(string directory)
        {
            string[] 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();

                GetDirectory();

                Console.WriteLine("\n(Press ESCAPE to exit)");
                if (Console.ReadKey().Key == ConsoleKey.Escape)
                    return;
            }
        }
    }
}

--- Koniec kodu ---

Ale to chyba też nie jest "czyste" skoro jedną metodę wywołuję w drugiej

inż. Avallach:
Aaargh, nie rozumiesz. Zmień kod tak, żeby metoda GetDirectory zawsze zwracała katalog (i nie wykonywała nie związanych z tym czynności, takich jak zmiana nazwy czegokolwiek).

Chyba że nie chcesz żeby GetDirectory zawsze zwracało katalog, to wtedy zmień nazwe na TryGetDirectory i np zwracaj nulla i odpowiednio to obsługuj w metodzie która tą wywołue (to już zależy od twojego projektu).

MajkeI:

--- Kod: ---        public static string GetDirectory()
        {
            Console.WriteLine("Input directory");
            return Console.ReadLine();
        }

--- Koniec kodu ---
Zwraca zawsze, bez względu na błąd

inż. Avallach:
Nie, zwraca albo katalog albo błędną ścieżkę. A ty masz przerobić to tak żeby zawsze zwracało katalog. Rusz głową. Podpowiem że musisz użyć Directory.Exists i pętli :|

Nawigacja

[0] Indeks wiadomości

[#] Następna strona

[*] Poprzednia strona

Idź do wersji pełnej