C#文件的读、写

1 文本文件写入

1.1 File类写入

//将字符串数组或集合写入文件,可指定编码
string filepath1 = @"F:\test.txt";
string[] strs = { "123", "456\n", "789" };

File.WriteAllLines(filepath1, strs);
File.WriteAllLines(filepath1, strs.ToList());
File.WriteAllLines(filepath1, strs, Encoding.Unicode);

//向文件中追加文本组
File.AppendAllLines(filepath1, strs);
File.AppendAllLines(filepath1, strs.ToList());
File.AppendAllLines(filepath1, strs, Encoding.Unicode);



//将字符串写入文件,可指定编码
string filepath2 = @"F:\test1.txt";
File.WriteAllText(filepath2, strs[0]);
File.WriteAllText(filepath2, strs[0], Encoding.Unicode);

//向文件中追加文本
File.AppendAllText(filepath2, strs[0]);
File.AppendAllText(filepath2, strs[0], Encoding.Unicode);

1.2 StreamWriter 类写入

string path = @"F:\test.txt";
string[] strs = { "123", "456\n", "789" };

StreamWriter sw = new StreamWriter(path, false);
sw.Write("开始写入");
foreach (var str in strs)
{
    sw.WriteLine(str);
}
sw.Write("写入完成");
sw.Close();
sw.Dispose();

2 文本文件读取

2.1 File 类读取

string path = @"F:\test.txt";
//读取所有行
List<string> text1 = File.ReadLines(path).ToList();

//读取所有行
string[] text2 = File.ReadAllLines(path);

//读取所有
string text3 = File.ReadAllText(path);

2.2 StreamReader 类读取

//按行读取
var sw = new StreamReader(path);
List<string> lstText = new List<string>();
string text;
while ((text = sw.ReadLine()) != null)
{
    lstText.Add(text);
}
sw.Close();
sw.Dispose();

//读取所有
var sw = new StreamReader(path);
string text = sw.ReadToEnd();
sw.Close();
sw.Dispose();

3 字节流文件读写

3.1 FileStream

/// <summary>
/// 字节数组写入文件中
/// </summary>
/// <param name="path">文件路径</param>
/// <param name="bytes">需要写入的字节数组</param>

public static void Write(string path, byte[] bytes)
{
    var fs = new FileStream(path, FileMode.Create);
    fs.Write(bytes, 0, bytes.Length);
    fs.Flush();
    fs.Close();
}

/// <summary>
/// 字节数组写入文件中
/// </summary>
/// <param name="path">文件路径</param>
/// <param name="bytes">返回读取到的字节数组</param>
public static void Read(string path, out byte[] bytes)
{
    var fs = new FileStream(path, FileMode.Open);
    bytes = new byte[fs.Length];
    fs.Read(bytes, 0, bytes.Length);
    fs.Flush();
    fs.Close();
}

3.2 Md5

/// <summary>
/// 通过Md5将字节流写入文件
/// </summary>
/// <param name="path">文件路径</param>
/// <param name="bytes">需要写入的字节数组</param>
public static void WriteByMd5(string path, byte[] bytes)
{
    var lst = bytes.ToList();
    var md5 = MD5.Create();
    var md5Buffer = md5.ComputeHash(bytes.ToArray());
    lst.Add((byte)'\n');
    lst.AddRange(md5Buffer);

    var zip = new GZipStream(new FileStream(path, FileMode.Create), CompressionMode.Compress);
    zip.Write(lst.ToArray(), 0, lst.Count);
    zip.Close();
    zip.Dispose();
}

/// <summary>
/// 通过Md5和zip读取字节流文件
/// </summary>
/// <param name="path">文件路径</param>
/// <param name="bytes">返回读取到的字节数组</param>
public static void ReadByMd5(string path, out byte[] bytes)
{
    try
    {
        var readBuffer = new List<byte>();
        var zip = new GZipStream(new FileStream(path, FileMode.Open), CompressionMode.Decompress);
        while (true)
        {
            try
            {
                var segment = new byte[102400];
                var res = zip.Read(segment, 0, segment.Length);
                if (res > 0)
                    readBuffer.AddRange(segment.Take(res));
                else
                    break;
            }
            catch (Exception)
            {
                break;
            }
        }
        zip.Close();
        zip.Dispose();

        //校验md5
        var delimiterMd5 = readBuffer.Count - 16 - 1;
        var dataBuffer = readBuffer.Take(delimiterMd5).ToArray();
        var md52 = MD5.Create().ComputeHash(dataBuffer);//计算数据区的哈希值
        var md5Bufer = readBuffer.Skip(delimiterMd5 + 1).ToArray();//获取源文件存入的哈希值
        //校验记得哈希值和存入的韩系值
        if (!md52.SequenceEqual(md5Bufer)) throw new Exception("文件已损坏");
        bytes = dataBuffer.ToArray();//数据
    }
    catch (Exception ex)
    {
        throw new Exception("文件已损坏", ex);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C#中实时入和取CSV文件可以使用CsvHelper库。要实时入CSV文件,可以使用以下代码: ```csharp using (var writer = new StreamWriter(path, true)) using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture)) { csv.WriteRecord(record); csv.NextRecord(); } ``` 这段代码将在现有的CSV文件中追加一条记录。`StreamWriter`的第二个参数设置为`true`表示以追加模式打开文件。`CsvWriter`的`WriteRecord`方法用于入一条记录,`NextRecord`方法用于将入位置移动到下一行。 要实时取CSV文件,可以使用以下代码: ```csharp using (var reader = new StreamReader(path)) using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture)) { while (csv.Read()) { var record = csv.GetRecord<Test>(); // 处理每一条记录 } } ``` 这段代码将逐行取CSV文件,并使用`GetRecord<Test>()`方法将每一行转换为`Test`类的对象。你可以在循环中处理每一条记录。 请注意,以上代码中的`Test`是一个示例类名,你需要根据实际情况替换为你自己的类名。 #### 引用[.reference_title] - *1* *2* *3* [C#中的CSV文件](https://blog.csdn.net/m0_62355555/article/details/125317199)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值