Я пишу простую программу для разбора текстового файла и помещения в Общий список.
Пример текста:
1,Joe,CA,58,2
2,Matt,TX,63,5
Иногда может быть ошибка с отсутствующими данными в файле
1,Joe,CA,58 // missing one number
2,Matt,TX,63,5
Я написал Catch Statement для обработки ошибки.В конце концов, Заказчику нужен файл, строки которого вызвали ошибку.
Мой принцип принципа программного обеспечения Вопрос в том, должны ли операторы catch использоваться для обработки другой бизнес-логики в случае ошибки или только для использования?для повышения исключений?В этом операторе catch я создаю папку с ошибкой и файл с данными, вызвавшими проблему.Это уместно?См. Заявление о вылове ниже.
-
public class CustomerData
{
public int CustomerId { get; set; }
public string CustomerName { get; set; }
public string CustomerState { get; set; }
public int ProductId { get; set; }
public int QuantityBought { get; set; }
}
public List<CustomerData> GetCustomer(string filename)
{
List<CustomerData> customerdata = new List<CustomerData>();
string CustomerBase = filename;
String fileToLoad = String.Format(CustomerBase);
using (StreamReader r = new StreamReader(fileToLoad))
{
string line;
while ((line = r.ReadLine()) != null)
{
string[] parts = line.Split(',');
// Skip the column names row
if (parts[0] == "id") continue;
try
{
CustomerData dbp = new CustomerData
{
CustomerId = Convert.ToInt32(parts[0]),
CustomerName = parts[1],
CustomerState = parts[2],
ProductId = Convert.ToInt32(parts[3]),
QuantityBought = Convert.ToInt32(parts[4]),
};
customerdata.Add(dbp);
}
catch
{
Console.WriteLine("Parse Error!");
string ErrorFolderPath = @"C:\Users\Desktop\Parsefile\ErrorFile";
string ErrorFile = System.IO.Path.Combine(ErrorFolderPath, Path.GetFileName(filename));
bool FolderExists = System.IO.Directory.Exists(ErrorFolderPath);
if (!FolderExists)
System.IO.Directory.CreateDirectory(ErrorFolderPath);
bool ErrorFileExists = System.IO.File.Exists(ErrorFile);
if (!ErrorFileExists)
System.IO.File.Create(ErrorFile);
using (TextWriter tw = new StreamWriter(ErrorFile))
{
tw.WriteLine(line);
}
}
}
}
return customerdata;
}