Czy try catch w pętli który ma "zagwarantować, że zapiszemy plik = dobre rozwiązanie?

0

Załóżmy, że chcemy zapisać do pliku "bardzo ważną informację", ale potencjalnie możemy dostać jakiś wyjątek. Czy takie coś załatwi sprawę w przyzwoity sposób? czy jednak może nam zabić program gdyby poleciało np. 100 wyjątków z rzędu bo "inny proces aktualnie używa tego pliku"?

bool saved = true;
do
{
    try
    {
        File.Create(path, createText);
    }
    catch
    {
        saved = false;
    }
} while(!saved);

Czy w taki sposób tworzy się logi? (profesjonalnie)

public static void createLog(string s)
{
    File.AppendText(path, $"{DateTime.Now.ToString()} {s} {Environment.NewLine}");
}
public static void function()
{
    createLog("trying to connect to db");
    if (connected_to_db == false)
    {
        createLog("unable to connect to db");
    }
}
1

To co podałeś nie wydaje mi się dobrym rozwiązaniem bo gdy np. użytkownik nie będzie mógł zapisać pliku to program utkwi w niekończącej się pętli.

Ale można dodać komunikat "Wystąpił błąd. Czy ponowić próbę zapisu?" i wtedy w zależności od otrzymanej odpowiedzi próbować ponownie albo nie.

0
atmal napisał(a):

To co podałeś nie wydaję mi się dobrym rozwiązaniem bo gdy np. użytkownik nie będzie mógł zapisać pliku to program utkwi w niekończącej się pętli.

Ale można dodać komunikat "Wystąpił błąd. Czy ponowić próbę zapisu?" i wtedy w zależności od otrzymanej odpowiedzi próbować ponownie albo nie.

Mam świadomość, ale co jeżeli nie jest to aplikacja która może poczekać na decyzję usera, a program który ma działać w tle?

Jak to rozwiązać poprawnie z tym, że zapis do pliku to "must have" i nie ominiemy tego np wrzucając danych do db.

2

Tak się nie logguje.... Użyj Log4net

0

Wypadałoby sprawdzić przede wszystkim jaki to dokładnie wyjątek, a potem pokazać sensowny komunikat (np. brak uprawnień do zapisu w danym katalogu, brak miejsca na dysku, inny błąd).

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0