The following example demonstrates how to Read and write *.csv File.
Read *.csv File:
internal static TableData ReadCsvFile(string filePath)
{
if (!File.Exists(filePath)) return null;
var fileExtention = Path.GetExtension(filePath);
if (fileExtention != ".csv") return null;
var table = new TableData
{
DataColumns = new List<string>(),
DataRows = new List<Dictionary<string, object>>()
};
try
{
var connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + filePath.Substring(0, filePath.LastIndexOf('\\')) +
";Extended Properties='text;HDR=yes;FMT=Delimited;'";
using (var connection = new OleDbConnection(connectionString))
{
connection.Open();
var restriction = new[] { null, null, ConvertNormalToOledbString(Path.GetFileName(filePath)), null };
var workSheetNamesDataTable = connection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, restriction);
if (workSheetNamesDataTable == null)
{
return null;
}
var dataRow = workSheetNamesDataTable.Rows.Cast<DataRow>().Where(workSheet => workSheet != null).FirstOrDefault();
var sheetName = dataRow["TABLE_NAME"].ToString();
var query = "select * from [" + sheetName + "]";
var dataSet = new DataSet();
using (var dataAdapter = new OleDbDataAdapter(query, connection))
{
var dTable = new DataTable(sheetName);
dataAdapter.Fill(dTable);
dataSet.Tables.Add(dTable);
}
var rows = dataSet.Tables[0].Rows;
table.TableName = sheetName;
foreach (DataColumn column in dataSet.Tables[0].Columns)
{
table.DataColumns.Add(column.ColumnName);
}
var columnCount = table.DataColumns.Count;
foreach (DataRow row in rows)
{
var newRow = new Dictionary<string, object>();
for (var i = 0; i < columnCount; i++)
{
newRow.Add(table.DataColumns[i], row[table.DataColumns[i]]);
}
table.DataRows.Add(newRow);
}
connection.Close();
}
}
catch
{
}
return table;
}
private static string ConvertNormalToOledbString(string str)
{
str = str.Replace('.', '#');
str = str.Replace('[', '(');
str = str.Replace(']', ')');
return str;
}
Write *.csv File:
internal static void CreateCsvFile(TableData tableData, string directoryPath)
{
if(tableData==null || tableData.DataColumns==null || tableData.DataColumns.Count<=0
|| tableData.DataRows==null || tableData.DataColumns.Count<=0)
return;
if (!Directory.Exists(directoryPath))
Directory.CreateDirectory(directoryPath);
var fileName = Guid.NewGuid().ToString() + ".csv";
var fileStream = File.Create(directoryPath + fileName);
using (var writer = new CsvFileWriter(fileStream))
{
//Write Header Row
var headerRow = new CsvRow();
headerRow.AddRange(tableData.DataColumns.Select(t => String.Format(t)));
writer.WriteRow(headerRow);
//Write value Row
foreach (var t1 in tableData.DataRows)
{
var row = new CsvRow();
row.AddRange(tableData.DataColumns.Select((t, j) => String.Format(t1[tableData.DataColumns[j]].ToString())));
writer.WriteRow(row);
}
}
}
I have attached the sample application along with this post
ReadandwriteCsvFile.zip (23.02 kb)
bc612eef-881d-4af1-936e-bfb9b548914e|0|.0
Categories:
C#, Console Application
25. July 2012
Tags: