2 Commits

Author SHA1 Message Date
2aeee0a009 fix: extra error messages 2026-02-19 08:41:43 +01:00
96d9334b56 fix: safeManager error handeling & Load fix 2026-02-19 08:25:07 +01:00
4 changed files with 117 additions and 41 deletions

View File

@@ -86,8 +86,20 @@ namespace CarManagerV3
/// </returns>
public static Car FromCsvString(string csv)
{
string[] parts = csv.Split(';');
return new Car(int.Parse(parts[0]), parts[1], parts[2], int.Parse(parts[3]), parts[4], int.Parse(parts[5]), decimal.Parse(parts[6]));
try
{
string[] parts = csv.Split(';');
Car temp = new Car(int.Parse(parts[0]), parts[1], parts[2], int.Parse(parts[3]), parts[4], int.Parse(parts[5]), decimal.Parse(parts[6]));
if (temp.Year < 1886 || temp.Year > DateTime.Now.Year + 1) throw new Exception($"Invalid year: {temp.Year}");
if (temp.Mileage < 0) throw new Exception($"Mileage cannot be negative: {temp.Mileage}");
if (temp.Price < 0) throw new Exception($"Price cannot be negative: {temp.Price}");
return temp;
}
catch (Exception ex)
{
Console.Error.WriteLine($"Error parsing CSV Car string: {ex.Message}");
return null;
}
}
/// <summary>

View File

@@ -2,6 +2,7 @@
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using System.Threading.Tasks;
@@ -18,10 +19,14 @@ namespace CarManagerV3
public static void InitializeImageFolder()
{
string path = "images";
if (!System.IO.Directory.Exists(path))
{
System.IO.Directory.CreateDirectory(path);
}
// Do not catch here. If we cannot create our images folder, the program wont work.
}
/// <summary>
@@ -47,15 +52,18 @@ namespace CarManagerV3
FetchImage(car);
string path = GetImagePath(car);
// does image exist?
if (System.IO.File.Exists(path))
try
{
return Image.FromFile(path);
if (System.IO.File.Exists(path))
{
return Image.FromFile(path);
}
}
else
catch (Exception ex)
{
return Image.FromFile("images/no_image_available.png");
Console.Error.WriteLine($"Error loading image: {ex.Message}");
}
return Image.FromFile("images/no_image_available.png");
}
/// <summary>

View File

@@ -27,6 +27,7 @@ namespace CarManagerV3
}
SafeManager.InitializeFile(filepath);
StateManager.setFilePath(filepath);
List<Car> _cars = SafeManager.ReadCars(filepath);
refreshCars(_cars);

View File

@@ -4,6 +4,7 @@ using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace CarManagerV3
@@ -24,14 +25,22 @@ namespace CarManagerV3
/// <param name="path">The path.</param>
public static void InitializeFile(string path)
{
if (!File.Exists(@path))
try
{
using (StreamWriter writer = new StreamWriter(@path))
if (!File.Exists(@path))
{
// Create the file, empty
writer.WriteLine();
using (StreamWriter writer = new StreamWriter(@path))
{
// Create the file, empty
writer.WriteLine();
writer.Close();
}
}
}
catch (Exception ex)
{
Console.Error.WriteLine($"Error initializing file: {ex.Message}");
}
}
/// <summary>
@@ -44,15 +53,38 @@ namespace CarManagerV3
public static List<Car> ReadCars(string path)
{
List<Car> cars = new List<Car>();
using (StreamReader reader = new StreamReader(@path))
List<string> failedLines = new List<string>();
try
{
string line;
while ((line = reader.ReadLine()) != null)
using (StreamReader reader = new StreamReader(@path))
{
// Process the line
if (line == "") continue;
cars.Add(Car.FromCsvString(line));
string line;
while ((line = reader.ReadLine()) != null)
{
// Process the line
if (line == "") continue;
Car tmp = Car.FromCsvString(line);
if (tmp == null)
{
failedLines.Add(line);
continue;
}
cars.Add(tmp);
}
reader.Close();
}
} catch (Exception ex)
{
Console.Error.WriteLine($"Error reading cars from file: {ex.Message}");
}
if (failedLines.Count > 0)
{
Console.Error.WriteLine($"Warning: {failedLines.Count} lines could not be parsed and were skipped.");
foreach (string failedLine in failedLines)
{
Console.Error.WriteLine($"Failed line: {failedLine}");
}
MessageBox.Show($"Warning: {failedLines.Count} lines in the file could not be parsed and were skipped. Check the console for details.", "Parsing Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
return cars;
}
@@ -64,12 +96,20 @@ namespace CarManagerV3
/// <param name="cars">A <see cref="List{Car}"/> containing all cars to save.</param>
public static void SaveCars(string path, List<Car> cars)
{
using (StreamWriter writer = new StreamWriter(@path))
try
{
foreach (Car car in cars)
using (StreamWriter writer = new StreamWriter(@path))
{
writer.WriteLine(car.ToCsvString());
foreach (Car car in cars)
{
writer.WriteLine(car.ToCsvString());
}
writer.Close();
}
} catch (Exception ex)
{
Console.Error.WriteLine($"Error saving cars to file: {ex.Message}");
MessageBox.Show($"Error saving cars to file: {ex.Message}", "Save Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
@@ -83,29 +123,37 @@ namespace CarManagerV3
public static void AddRecentPath(string path)
{
List<string> paths = new List<string>();
if (File.Exists(recentPathsFile))
try
{
using (StreamReader reader = new StreamReader(recentPathsFile))
if (File.Exists(recentPathsFile))
{
string line;
while ((line = reader.ReadLine()) != null)
using (StreamReader reader = new StreamReader(recentPathsFile))
{
paths.Add(line);
string line;
while ((line = reader.ReadLine()) != null)
{
paths.Add(line);
}
reader.Close();
}
}
}
paths.Remove(path);
paths.Insert(0, path);
if (paths.Count > 5)
{
paths = paths.Take(5).ToList();
}
using (StreamWriter writer = new StreamWriter(recentPathsFile))
{
foreach (string p in paths)
paths.Remove(path);
paths.Insert(0, path);
if (paths.Count > 5)
{
writer.WriteLine(p);
paths = paths.Take(5).ToList();
}
using (StreamWriter writer = new StreamWriter(recentPathsFile))
{
foreach (string p in paths)
{
writer.WriteLine(p);
}
writer.Close();
}
} catch (Exception ex)
{
Console.Error.WriteLine($"Error managing recent paths: {ex.Message}");
}
}
@@ -118,16 +166,23 @@ namespace CarManagerV3
public static List<string> GetRecentPaths()
{
List<string> paths = new List<string>();
if (File.Exists(recentPathsFile))
try
{
using (StreamReader reader = new StreamReader(recentPathsFile))
if (File.Exists(recentPathsFile))
{
string line;
while ((line = reader.ReadLine()) != null)
using (StreamReader reader = new StreamReader(recentPathsFile))
{
paths.Add(line);
string line;
while ((line = reader.ReadLine()) != null)
{
paths.Add(line);
}
reader.Close();
}
}
} catch (Exception ex)
{
Console.Error.WriteLine($"Error reading recent paths: {ex.Message}");
}
return paths;
}