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