最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

c# 對CSV文件操作(寫入、讀取、修改)

 更新時間:2020年08月11日 08:31:32   作者:張中華  
這篇文章主要介紹了c# 如何對CSV文件操作,幫助大家更好的理解和學習C#,感興趣的朋友可以了解下

一、DataTable數(shù)據(jù)寫入CSV文件

public static void SaveCSV(DataTable dt, string fullPath)//table數(shù)據(jù)寫入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++) //寫入各行數(shù)據(jù)
  {
    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讀取數(shù)據(jù)返回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 = "";
  //記錄每行記錄中的各字段內(nèi)容
  string[] aryLine = null;
  string[] tableHead = null;
  //標示列數(shù)
  int columnCount = 0;
  //標示是否是讀取的第一行
  bool IsFirst = true;
  //逐行讀取CSV中的數(shù)據(jù)
  while ((strLine = sr.ReadLine()) != null)
  {
    if (IsFirst == true)
    {
      tableHead = strLine.Split(',');
      IsFirst = false;
      columnCount = tableHead.Length;
      //創(chuàng)建列
      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;
}
/// 給定文件的路徑,讀取文件的二進制數(shù)據(jù),判斷文件的編碼類型
/// <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;  //計算當前正分析的字符應還有的字節(jié)數(shù)
  byte curByte; //當前分析的字節(jié).
  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;
}

三、修改文件名稱

我們需要保存歷史數(shù)據(jù) 或者實時的知道那個文件被修改 可以通過改變文件的名稱 如加上當天的日期等等。

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文件的數(shù)據(jù)寫入

直接在網(wǎng)頁表單提交數(shù)據(jù)保存在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);
    //清空緩沖區(qū)
    sw.Flush();
    //關(guān)閉流
    sw.Close();
    FileStream.Close();
  }
  catch 
  {
    re = false;
  }
  return re;
}

以上就是c# 對CSV文件操作(寫入、讀取、修改)的詳細內(nèi)容,更多關(guān)于C# csv文件的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C# System.Linq 萬能的查詢語句示例詳解

    C# System.Linq 萬能的查詢語句示例詳解

    在C#編程中,System.Linq命名空間提供了一組豐富的查詢功能,使得操作各種數(shù)據(jù)類型更加高效和便捷,本文介紹了如何使用Linq提供的不同查詢子句和方法,以及這些方法的具體應用示例,旨在幫助開發(fā)者更好地掌握Linq的查詢技巧,感興趣的朋友一起看看吧
    2024-09-09
  • .NET中保證線程安全的高級方法Interlocked類使用介紹

    .NET中保證線程安全的高級方法Interlocked類使用介紹

    這篇文章主要介紹了.NET中保證線程安全的高級方法Interlocked類使用介紹,Interlocked類可以為為多個線程共享的變量提供原子操作,需要的朋友可以參考下
    2014-07-07
  • 深入了解c# 設計模式之簡單工廠模式

    深入了解c# 設計模式之簡單工廠模式

    這篇文章主要介紹了c# 設計模式之簡單工廠模式的的相關(guān)資料,文中代碼非常詳細,幫助大家更好的理解和學習,感興趣的朋友可以了解下
    2020-06-06
  • C#語言MVC框架Aspose.Cells控件導出Excel表數(shù)據(jù)

    C#語言MVC框架Aspose.Cells控件導出Excel表數(shù)據(jù)

    這篇文章主要為大家詳細介紹了C#語言MVC框架Aspose.Cells控件導出Excel表數(shù)據(jù),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • Unity實現(xiàn)俄羅斯方塊(一)

    Unity實現(xiàn)俄羅斯方塊(一)

    這篇文章主要介紹了Unity實現(xiàn)俄羅斯方塊的第一部分代碼,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-06-06
  • LINQ投影操作符Select與限制操作符where介紹

    LINQ投影操作符Select與限制操作符where介紹

    這篇文章介紹了LINQ投影操作符Select與限制操作符where,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-02-02
  • C#實現(xiàn)抓取和分析網(wǎng)頁類實例

    C#實現(xiàn)抓取和分析網(wǎng)頁類實例

    這篇文章主要介紹了C#實現(xiàn)抓取和分析網(wǎng)頁類,實例分析了C#抓取及分析網(wǎng)頁中文本及連接的相關(guān)使用技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-05-05
  • ASP.NET總結(jié)C#中7種獲取當前路徑的方法

    ASP.NET總結(jié)C#中7種獲取當前路徑的方法

    本文主要介紹了7種獲取當前路徑的方法,并做了代碼演示,分享給大家,感興趣的朋友可以參考一下。
    2016-03-03
  • Winform+.Net6實現(xiàn)圖片拖拽上傳功能

    Winform+.Net6實現(xiàn)圖片拖拽上傳功能

    這篇文章主要為大家詳細介紹了如何使用WinformPictureBox控件+.Net6 WebApi實現(xiàn)圖片拖拽上傳功能,文中的示例代碼講解詳細,感興趣的可以學習一下
    2023-09-09
  • C#中GraphicsPath的Flatten方法用法實例

    C#中GraphicsPath的Flatten方法用法實例

    這篇文章主要介紹了C#中GraphicsPath的Flatten方法,實例分析了Flatten方法的相關(guān)使用技巧,需要的朋友可以參考下
    2015-06-06

最新評論

万年县| 工布江达县| 清丰县| 南川市| 新龙县| 方山县| 宁国市| 镇安县| 马公市| 翁牛特旗| 临颍县| 湖北省| 常德市| 疏勒县| 金华市| 新密市| 公安县| 利辛县| 庆云县| 滨州市| 枣庄市| 浦东新区| 江源县| 馆陶县| 郎溪县| 宁波市| 白城市| 墨脱县| 西林县| 芦溪县| 老河口市| 和政县| 永胜县| 龙南县| 盖州市| 罗平县| 邵武市| 子洲县| 崇州市| 和平区| 潞西市|