c# 对CSV文件操作(写入、读取、修改)

一、DataTable数据写入CSV文件

public static void SaveCSV(DataTable dt, string fullPath)//table数据写入csv
{
  System.IO.FileInfo fi = new System.IO.FileInfo(fullPath);
  if (!fi.Directory.Exists)
  {
    fi.Directory.Create();
  }
  System.IO.FileStream fs = new System.IO.FileStream(fullPath, System.IO.FileMode.Create,
    System.IO.FileAccess.Write);
  System.IO.StreamWriter sw = new System.IO.StreamWriter(fs, System.Text.Encoding.UTF8);
  string data = "";

  for (int i = 0; i < dt.Columns.Count; i++)//写入列名
  {
    data += dt.Columns[i].ColumnName.ToString();
    if (i < dt.Columns.Count - 1)
    {
      data += ",";
    }
  }
  sw.WriteLine(data);

  for (int i = 0; i < dt.Rows.Count; i++) //写入各行数据
  {
    data = "";
    for (int j = 0; j < dt.Columns.Count; j++)
    {
      string str = dt.Rows[i][j].ToString();
      str = str.Replace("\"", "\"\"");//替换英文冒号 英文冒号需要换成两个冒号
      if (str.Contains(',') || str.Contains('"')
        || str.Contains('\r') || str.Contains('\n')) //含逗号 冒号 换行符的需要放到引号中
      {
        str = string.Format("\"{0}\"", str);
      }

      data += str;
      if (j < dt.Columns.Count - 1)
      {
        data += ",";
      }
    }
    sw.WriteLine(data);
  }
  sw.Close();
  fs.Close();
}

二、读取CSV文件到DataTable

public static DataTable OpenCSV(string filePath)//从csv读取数据返回table
{
  System.Text.Encoding encoding = GetType(filePath); //Encoding.ASCII;//
  DataTable dt = new DataTable();
  System.IO.FileStream fs = new System.IO.FileStream(filePath, System.IO.FileMode.Open,
    System.IO.FileAccess.Read);

  System.IO.StreamReader sr = new System.IO.StreamReader(fs, encoding);

  //记录每次读取的一行记录
  string strLine = "";
  //记录每行记录中的各字段内容
  string[] aryLine = null;
  string[] tableHead = null;
  //标示列数
  int columnCount = 0;
  //标示是否是读取的第一行
  bool IsFirst = true;
  //逐行读取CSV中的数据
  while ((strLine = sr.ReadLine()) != null)
  {
    if (IsFirst == true)
    {
      tableHead = strLine.Split(',');
      IsFirst = false;
      columnCount = tableHead.Length;
      //创建列
      for (int i = 0; i < columnCount; i++)
      {
        DataColumn dc = new DataColumn(tableHead[i]);
        dt.Columns.Add(dc);
      }
    }
    else
    {
      aryLine = strLine.Split(',');
      DataRow dr = dt.NewRow();
      for (int j = 0; j < columnCount; j++)
      {
        dr[j] = aryLine[j];
      }
      dt.Rows.Add(dr);
    }
  }
  if (aryLine != null && aryLine.Length > 0)
  {
    dt.DefaultView.Sort = tableHead[0] + " " + "asc";
  }

  sr.Close();
  fs.Close();
  return dt;
}
/// 给定文件的路径,读取文件的二进制数据,判断文件的编码类型
/// <param name="FILE_NAME">文件路径</param>
/// <returns>文件的编码类型</returns>

public static System.Text.Encoding GetType(string FILE_NAME)
{
  System.IO.FileStream fs = new System.IO.FileStream(FILE_NAME, System.IO.FileMode.Open,
    System.IO.FileAccess.Read);
  System.Text.Encoding r = GetType(fs);
  fs.Close();
  return r;
}

/// 通过给定的文件流,判断文件的编码类型
/// <param name="fs">文件流</param>
/// <returns>文件的编码类型</returns>
public static System.Text.Encoding GetType(System.IO.FileStream fs)
{
  byte[] Unicode = new byte[] { 0xFF, 0xFE, 0x41 };
  byte[] UnicodeBIG = new byte[] { 0xFE, 0xFF, 0x00 };
  byte[] UTF8 = new byte[] { 0xEF, 0xBB, 0xBF }; //带BOM
  System.Text.Encoding reVal = System.Text.Encoding.Default;

  System.IO.BinaryReader r = new System.IO.BinaryReader(fs, System.Text.Encoding.Default);
  int i;
  int.TryParse(fs.Length.ToString(), out i);
  byte[] ss = r.ReadBytes(i);
  if (IsUTF8Bytes(ss) || (ss[0] == 0xEF && ss[1] == 0xBB && ss[2] == 0xBF))
  {
    reVal = System.Text.Encoding.UTF8;
  }
  else if (ss[0] == 0xFE && ss[1] == 0xFF && ss[2] == 0x00)
  {
    reVal = System.Text.Encoding.BigEndianUnicode;
  }
  else if (ss[0] == 0xFF && ss[1] == 0xFE && ss[2] == 0x41)
  {
    reVal = System.Text.Encoding.Unicode;
  }
  r.Close();
  return reVal;
}

/// 判断是否是不带 BOM 的 UTF8 格式
/// <param name="data"></param>
/// <returns></returns>
private static bool IsUTF8Bytes(byte[] data)
{
  int charByteCounter = 1;  //计算当前正分析的字符应还有的字节数
  byte curByte; //当前分析的字节.
  for (int i = 0; i < data.Length; i++)
  {
    curByte = data[i];
    if (charByteCounter == 1)
    {
      if (curByte >= 0x80)
      {
        //判断当前
        while (((curByte <<= 1) & 0x80) != 0)
        {
          charByteCounter++;
        }
        //标记位首位若为非0 则至少以2个1开始 如:110XXXXX...........1111110X 
        if (charByteCounter == 1 || charByteCounter > 6)
        {
          return false;
        }
      }
    }
    else
    {
      //若是UTF-8 此时第一位必须为1
      if ((curByte & 0xC0) != 0x80)
      {
        return false;
      }
      charByteCounter--;
    }
  }
  if (charByteCounter > 1)
  {
    throw new Exception("非预期的byte格式");
  }
  return true;
}

三、修改文件名称

我们需要保存历史数据 或者实时的知道那个文件被修改 可以通过改变文件的名称 如加上当天的日期等等。

public static bool ChangeFileName(string OldPath, string NewPath)
{
  bool re = false;
  try
  {
    if (File.Exists(OldPath))
    {
      File.Move(OldPath, NewPath);
      re = true;
    }
  }
  catch
  {
    re = false;
  }
  return re;
}

四、CSV文件的数据写入

直接在网页表单提交数据保存在csv文件中 直接写入文件

public static bool SaveCSV(string fullPath,string Data)
{
  bool re = true;
  try
  {
    FileStream FileStream = new FileStream(fullPath, FileMode.Append);
    StreamWriter sw = new StreamWriter(FileStream, System.Text.Encoding.UTF8);
    sw.WriteLine(Data);
    //清空缓冲区
    sw.Flush();
    //关闭流
    sw.Close();
    FileStream.Close();
  }
  catch
  {
    re = false;
  }
  return re;
}

以上就是c# 对CSV文件操作(写入、读取、修改)的详细内容,更多关于C# csv文件的资料请关注我们其它相关文章!

(0)

相关推荐

  • C#导出数据到CSV文件的通用类实例

    本文实例讲述了C#导出数据到csv文件的通用类.分享给大家供大家参考.具体如下: 通过这个类可以很简单的定义数据格式,并导出到csv文件 //这里写了一个通用的类 using System; using System.Data; using System.Configuration; using System.Collections.Generic; using System.Web; using System.Web.Security; using System.Web.UI; using S

  • C#操作CSV文件类实例

    本文实例讲述了C#操作CSV文件类.分享给大家供大家参考.具体分析如下: 这个C#类用于转换DataTable为CSV文件.CSV文件转换成DataTable,如果需要进行CSV和DataTable之间进行转换,使用这个类非常合适. using System.Data; using System.IO; namespace DotNet.Utilities { /// <summary> /// CSV文件转换类 /// </summary> public static class

  • C# 解析 Excel 并且生成 Csv 文件代码分析

    今天工作中遇到一个需求,就是获取 excel 里面的内容,并且把 excel 另存为 csv,因为本人以前未接触过,所以下面整理出来的代码均来自网络,具体参考链接已丢失,原作者保留所有权利! 例子: 复制代码 代码如下: using System; using System.Data; namespace ExportExcelToCode {     class ExcelOperater     {         public void Operater()         {      

  • 一个读写csv文件的C#类

    本文实例为大家分享了一个读写csv文件的C#类,供大家参考,具体内容如下 using System; using System.Collections.Generic; using System.IO; using System.Text; namespace CSVDemo { /// <summary> /// CSVUtil is a helper class handling csv files. /// </summary> public class CSVUtil {

  • C#实现导入CSV文件到Excel工作簿的方法

    本文实例讲述了C#实现导入CSV文件到Excel工作簿的方法.分享给大家供大家参考.具体如下: 你必须在项目中添加对 Microsoft.Office.Core 的引用:from the .NET tab of the Visual Studio Add Reference dialog box, and the Microsoft Excel 12.0 Object Library (you can use 14.0 if you want, too, but nothing lower).

  • C#读取csv格式文件的方法

    本文实例讲述了C#读取csv格式文件的方法.分享给大家供大家参考.具体实现方法如下: 一.CSV文件规则   1 开头是不留空,以行为单位. 2 可含或不含列名,含列名则居文件第一行. 3 一行数据不跨行,无空行. 4 以半角逗号(即,)作分隔符,列为空也要表达其存在. 5 列内容如存在半角逗号(即,)则用半角引号(即',')将该字段值包含起来. 6 列内容如存在半角引号(即")则应替换成半角双引号("")转义,并用半角引号(即"")将该字段值包含起来.

  • C#中将DataTable转换成CSV文件的方法

    DataTable用于在.net项目中,用于缓存数据,DataTable表示内存中数据的一个表.CSV文件最早用在简单的数据库里,由于其格式简单,并具备很强的开放性,所以起初被扫图家用作自己图集的标记.CSV文件是个纯文本文件,每一行表示一张图片的许多属性. 在.net项目中运用C#将DataTable转化为CSV文件,现在提供一个较为通用的方法,具体代码如下: /// <summary> /// 将DataTable转换成CSV文件 /// </summary> /// <

  • C#中csv文件与DataTable互相导入处理实例解析

    本文介绍了C#中csv文件与DataTable互相导入处理实例解析,主要功能代码封装处理下,相对比较简单.以后项目用到的话可以直接使用.具体方法如下: 1.封装好的类如下: using System; using System.Data; using System.IO; using System.Text; using CSharpUtilHelpV2; using StringUtilHelp; namespace DBUtilHelpV2Plus { public static class

  • c# 对CSV文件操作(写入、读取、修改)

    一.DataTable数据写入CSV文件 public static void SaveCSV(DataTable dt, string fullPath)//table数据写入csv { System.IO.FileInfo fi = new System.IO.FileInfo(fullPath); if (!fi.Directory.Exists) { fi.Directory.Create(); } System.IO.FileStream fs = new System.IO.File

  • Python 文件操作之读取文件(read),文件指针与写入文件(write),文件打开方式示例

    本文实例讲述了Python 文件操作之读取文件(read),文件指针与写入文件(write),文件打开方式.分享给大家供大家参考,具体如下: demo.py(读取文件): # 1. 打开文件 file = open("readme.txt") # 文件不存在会抛异常. 默认以只读方式打开 # with open("readme.txt") as file: # 这种方式,会自动close()释放资源 # 2. 读取文件内容 text = file.read() #

  • python基础教程之csv文件的写入与读取

    目录 csv的简单介绍 csv的写入 第一种写入方法(通过创建writer对象) 第二种写入方法(使用DictWriter可以使用字典的方式将数据写入) csv的读取 通过reader()读取 通过dictreader()读取 总结 csv的简单介绍 CSV (Comma Separated Values),即逗号分隔值(也称字符分隔值,因为分隔符可以不是逗号),是一种常用的文本格式,用以存储表格数据,包括数字或者字符.很多程序在处理数据时都会碰到csv这种格式的文件.python自带了csv模

  • R语言对CSV文件操作实例讲解

    在 R 语言中,我们可以从存储在 R 语言环境外的文件中读取数据. 我们还可以将数据写入将被操作系统存储和访问的文件. R 语言可以读取和写入各种文件格式,如​csv​,​excel​,​xml​等. 在本章中,我们将学习从​csv​文件读取数据,然后将数据写入​csv​文件. 该文件应该存在于当前工作目录中,以便 R 语言可以读取它. 当然我们也可以设置我们自己的目录并从那里读取文件. 获取和设置工作目录 您可以使用​getwd()​函数检查R语言工作区指向的目录. 您还可以使用​setwd(

  • C#文件操作、读取文件、Debug/Trace类用法

    1.文件操作 这段代码在 System.Private.CoreLib 下,对 System.IO.File 中的代码进行精简,供 CLR 使用. 当使用文件时,要提前判断文件路径是否存在,日常项目中要使用到文件的地方应该不少,可以统一一个判断文件是否存在的方法: public static bool Exists(string? path) { try { // 可以将 string? 改成 string if (path == null) return false; if (path.Len

  • Java 导出 CSV 文件操作详情

    首先第一步 导入坐标: <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-csv</artifactId> <version>1.6</version> </dependency> 第二步 引入工具类 说明下 因为这个工具类用到是Listj集合我就顺带吧 实体类和map 之间的转换也说了 import org.apach

  • python对csv文件追加写入列的方法

    python对csv文件追加写入列,具体内容如下所示: 原始数据 [外链图片转存失败(img-zQSQWAyQ-1563597916666)(C:\Users\innduce\AppData\Roaming\Typora\typora-user-images\1557663419920.png)] import pandas as pd import numpy as np data = pd.read_csv(r'平均值.csv') print(data.columns)#获取列索引值 dat

  • Python中文件的写入读取以及附加文字方法

    今天学习到python的读取文件部分. 还是以一段代码为例: filename='programming.txt' with open(filename,'w') as file_object: file_object.write("I love programming.\n") file_object.write("I love travelling.\n") 在这里调用open打开文件,两个实参,一个是要打开的文件名称,第二个实参('w')是告诉Python我们

  • python文件操作之批量修改文件后缀名的方法

    1.引言 需要把.dat 格式 转化成 .txt格式 2.实现 ##python批量更换后缀名 import os # 列出当前目录下所有的文件 files = os.listdir('.') #print('files',files) for filename in files: portion = os.path.splitext(filename) # 如果后缀是.dat if portion[1] == ".dat": # 重新组合文件名和后缀名 newname = porti

  • Python实现的简单读写csv文件操作示例

    本文实例讲述了Python实现的简单读写csv文件操作.分享给大家供大家参考,具体如下: python中有一个读写csv文件的包,直接import csv即可 新建test.csv 1.写 import csv with open("test.csv","w",encoding='utf8') as csvfile: writer=csv.writer(csvfile) writer.writerow(["index","a_name&

随机推荐