Inna twórczość > Platforma .NET
[C#] Obsługa błędów I/O
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
[#] Następna strona
Idź do wersji pełnej