Inna twórczość > Platforma .NET

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

<< < (4/5) > >>

MajkeI:

--- Kod: ---            Console.WriteLine("Input directory");
            string dir = Console.ReadLine();

            if (!Directory.Exists(dir))
                Console.WriteLine("Directory is incorrect!");
            else
                return dir;

            return ""; // no i tutaj mam tak zostawić?

--- Koniec kodu ---

inż. Avallach:
Nieee, teraz zwróci albo katalog, albo pustego stringa. A ma zawsze zwracać katalog. Podpowiedziałem ci już że chodzi o pętlę.

--- Kod: ---public static string GetDirectory()
{
    string dir = null;
    while(!Directory.Exists(dir))
    {
        Console.WriteLine("Input directory");
        dir = Console.ReadLine();
    }
    return dir;
}
--- Koniec kodu ---
W ten sposób metoda zawsze zrobi to co mówi jej nazwa - zwróci katalog. Nastepne metody będą mogły po prostu użyć tego co zwróci bez sprawdzania czy to katalog, bo przecież obiecała że zwróci katalog.

MajkeI:
Właśnie to napisałem ... :C tylko troche inaczej.

Ale wywala błąd cały projekt teraz
EDIT: Aaaa okej, już to widze

Jak odwołać się do katalogu powyżej?
C:\Cośtam\.. to katalog niżej, sprawdziłem, ale co jeśli chcę podkatalog wyżej o nieznanej mi nazwie?
C:\Cośtam\* oczywiście nie działa

Pobawię się, jak coś wyjdzie lub nie to dam znać. Dzięki @Avallach , @Adanos

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

namespace Program {
    class Program {
        public static string GetDirectory() {
            string dir = null;

            while (!Directory.Exists(dir)) {
                Console.Clear();
                Console.WriteLine("Input directory");
                dir = Console.ReadLine();
            }
            return dir;
        }
        public static void ChangeNamesWithSubfolders(string dir) {
            string[] filePaths = Directory.GetFiles(dir);

            if (filePaths.Length == 0)
{
Console.ForegroundColor = ConsoleColor.Red;
                Console.WriteLine(" No files in " + dir + "!");
}
            else
{
Console.ForegroundColor = ConsoleColor.Green;
                Console.WriteLine(" Changed files in " + dir + ":");
}

            for (int i = 0; i < filePaths.Length; i++) {
                File.Move(filePaths[i], filePaths[i].ToUpper());
                filePaths[i] = Path.GetFileName(filePaths[i]);
                Console.WriteLine("  - " + filePaths[i]);
            }

            DirectoryInfo directory = new DirectoryInfo(dir);
            DirectoryInfo[] directories = directory.GetDirectories();

            for (int i = 0; i < directories.Length; i++)
ChangeNamesWithSubfolders(dir + "\\" + directories[i]);

Console.ForegroundColor = ConsoleColor.Gray;
        }
        static void Main(string[] args) {
            while (true) {
                Console.Clear();

                ChangeNamesWithSubfolders(GetDirectory());

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

--- Koniec kodu ---
Czy ten kod jest czysty?

Adanos:
Akurat metodę ChangeNamesWithSubfolders możesz podzielić na 3 mniejsze:
- jakaś metoda "info":

--- Kod: ---if (filePaths.Length == 0)
{
Console.ForegroundColor = ConsoleColor.Red;
                Console.WriteLine(" No files in " + dir + "!");
}
            else
{
Console.ForegroundColor = ConsoleColor.Green;
                Console.WriteLine(" Changed files in " + dir + ":");
}
--- Koniec kodu ---
- zmiana nazwy:

--- Kod: ---for (int i = 0; i < filePaths.Length; i++) {
                File.Move(filePaths[i], filePaths[i].ToUpper());
                filePaths[i] = Path.GetFileName(filePaths[i]);
                Console.WriteLine("  - " + filePaths[i]);
            }
--- Koniec kodu ---
- sprawdzanie podkatalogów:

--- Kod: ---DirectoryInfo directory = new DirectoryInfo(dir);
            DirectoryInfo[] directories = directory.GetDirectories();

            for (int i = 0; i < directories.Length; i++)
ChangeNamesWithSubfolders(dir + "\\" + directories[i]);

Console.ForegroundColor = ConsoleColor.Gray;
--- Koniec kodu ---

Avallach już pisał to, ale nie używaj tego:

--- Kod: ---while (true)
--- Koniec kodu ---
Zadeklaruj jakąś zmienną.

MajkeI:

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

namespace Program
{
    class Program
    {
        public static string GetDirectory()
        {
            string dir = null;
            while (!Directory.Exists(dir))
            {
                Console.Clear();
                Console.WriteLine("Input directory");
                dir = Console.ReadLine();
            }
            return dir;
        }
        public static void GetInfoAboutDirectory(string[] filePaths, string dir)
        {
            if (filePaths.Length == 0)
            {
                Console.ForegroundColor = ConsoleColor.Red;
                Console.WriteLine(" No files in " + dir + "!");
            }
            else
            {
                Console.ForegroundColor = ConsoleColor.Green;
                Console.WriteLine(" Changed files in " + dir + ":");
            }
        }
        public static void ChangeFileNames(string[] filePaths)
        {
            for (int i = 0; i < filePaths.Length; i++)
            {
                File.Move(filePaths[i], filePaths[i].ToUpper());
                filePaths[i] = Path.GetFileName(filePaths[i]);
                Console.WriteLine("  - " + filePaths[i]);
            }
        }
        public static void CheckSubfolders(string dir)
        {
            DirectoryInfo directory = new DirectoryInfo(dir);
            DirectoryInfo[] directories = directory.GetDirectories();
            for (int i = 0; i < directories.Length; i++)
                ChangeNamesWithSubfolders(dir + "\\" + directories[i]);
        }
        public static void ChangeNamesWithSubfolders(string dir)
        {
            string[] filePaths = Directory.GetFiles(dir);
            GetInfoAboutDirectory(filePaths, dir);
            ChangeFileNames(filePaths);
            CheckSubfolders(dir);
            Console.ForegroundColor = ConsoleColor.Gray;
        }
        static void Main(string[] args)
        {
            bool end = false;
            while (end == false)
            {
                Console.Clear();
                ChangeNamesWithSubfolders(GetDirectory());
                Console.WriteLine("\n(Press ESCAPE to exit)");
                if (Console.ReadKey().Key == ConsoleKey.Escape)
                    end = true;
            }
        }
    }
}

--- Koniec kodu ---

?

Nawigacja

[0] Indeks wiadomości

[#] Następna strona

[*] Poprzednia strona

Idź do wersji pełnej