using System.Collections.Generic;
static void Main(string[] args)
Console.WriteLine("Wprowadz lokalizacje pliku: ");
string dbfFullPath = Console.ReadLine();
Console.WriteLine("Lokalizacja to: " + dbfFullPath);
RecursiveFileProcessor pr = new RecursiveFileProcessor(dbfFullPath);
Console.WriteLine("Odnalezione pliki:\n");
foreach (string file in pr.DbFilesList)
DataTable dt = DbfTableHandler(file);
CSVConverter cc = new CSVConverter(dt, file.Replace(".dbf", ".csv"));
Console.WriteLine("End of program execution");
Console.WriteLine("Press any key to end");
public static DataTable DbfTableHandler(string dbfFilename)
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
DbfTable table = DbfTable.Open(dbfFilename, Encoding.GetEncoding(1250));
DataTable dt = table.AsDataTable();
public class RecursiveFileProcessor
private string RootDbPath { get; set; }
public List<string> DbFilesList = new List<string>();
public RecursiveFileProcessor(string rootDbPath)
if (Directory.Exists(rootDbPath))
this.RootDbPath = Path.GetFullPath(rootDbPath);
Console.WriteLine("Podana ścieżka jest poprawna.");
Console.WriteLine("Podana ścieżka nie jest poprawna.");
Console.WriteLine("Naciśnij dowolny klawisz aby zakończyć.");
public void ProcessDirectory()
ProcessDirectory(RootDbPath);
public void ProcessDirectory(string directoryPath)
string[] filesInDirectory = Directory.GetFiles(directoryPath);
foreach (string fileName in filesInDirectory)
this.DbFilesList.Add(fileName);
string[] subdirectoryFiles = Directory.GetDirectories(directoryPath);
foreach (string subdirectory in subdirectoryFiles)
ProcessDirectory(subdirectory);
public class CSVConverter
private DataTable Dt { get; set; }
private string CSVFile { get; set; }
public CSVConverter(DataTable dt, string csvFile)
StringBuilder sb = new StringBuilder();
var columnNames = Dt.Columns.Cast<DataColumn>().Select(column => column.ColumnName).ToArray();
sb.AppendLine(string.Join(";", columnNames));
foreach (DataRow row in Dt.Rows)
var fields = row.ItemArray.Select(field => field.ToString()).ToArray();
for (int i = 0; i < fields.Length; i++)
sb.Append("\"" + fields[i].Trim());
sb.Append((i != fields.Length - 1) ? "\";" : "\"");
File.WriteAllText(CSVFile, sb.ToString());