appendix FileHelper

using System;
using System.IO;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Collections.Generic;
using System.Linq;

public class Ini
{
    IDictionary<string, IDictionary<string, string>> dict=new Dictionary<string, IDictionary<string, string>>();
    public void Clear()
    {
        dict.Clear();
    }
    public void Set(string name,string key, string value)
    {
        if(!dict.ContainsKey(name))
            dict.Add(name,new Dictionary<string, string>());

        var tmp = dict[name];
        if (tmp.ContainsKey(key))
        {
            tmp[key] = value;
        }
        else
        {
            tmp.Add(key, value);
        }
    }
    public IDictionary<string,string> GetName(string name)
    {
        IDictionary<string, string> result;
        dict.TryGetValue(name, out result);
        return result;
    }

    public string GetValue(string name,string key)
    {
        if(dict.ContainsKey(name))
        {
            string result;
            dict[name].TryGetValue(key, out result);
            return result;
        }
        return string.Empty;
    }
    public string[] GetKeys(string name)
    {
        if (!dict.ContainsKey(name))
            return default;
        return dict[name].Keys.ToArray();
    }

    public bool Contains(string name)
    {
        return dict.ContainsKey(name);
    }
    public string[] GetNames()
    {
        return dict.Keys.ToArray();
    }
}

public static class FileHelper
{
    public static async Task WriteInitAsync(string path,Ini ini, Encoding encoding, CancellationToken cancellationToken = default(CancellationToken))
    {
        try
        {
            StringBuilder stringBuilder = new StringBuilder();

            foreach(var name in ini.GetNames())
            {
                stringBuilder.AppendLine($"[{name}]");
                foreach(var item in  ini.GetName(name))
                {
                    stringBuilder.AppendLine($"{item.Key}={item.Value}");
                }
                if (cancellationToken.IsCancellationRequested)
                {
                    cancellationToken.ThrowIfCancellationRequested();
                }
            }
            if(stringBuilder.Length > 0)
            {
                stringBuilder.Length -= 2;
            }

            await WriteAllTextAsync(path, stringBuilder.ToString(), encoding, cancellationToken);
        }
        catch (Exception ex)
        {
            Log.Error($"{ex}");
        }
    }
    public static async Task<Ini> ReadIniAsync(string path, Encoding encoding, CancellationToken cancellationToken = default(CancellationToken))
    {
        var text = await ReadTextAsync(path, encoding, cancellationToken);
        if (text.Length == 0)
            return default;

        try
        {
            var ini = new Ini();
            var lines = text.Split("\r\n");
            string name= string.Empty;
            bool isStart=false;
            foreach(var line in lines)
            {
                if (line.Length == 0)
                    continue;
                if (line.Contains('[') && line.Contains(']'))
                {
                    name = line.Trim();
                    name = name.Replace("[","");
                    name = name.Replace("]","");
                    isStart = true;
                }
                else if(isStart)
                {
                    var items = line.Split('=');
                    var key = items[0].Trim();
                    string value=string.Empty;
                    if(items.Length == 2)
                    {
                        value = items[1].Trim();
                    }
                    ini.Set(name,key,value);
                }
                if(cancellationToken.IsCancellationRequested)
                {
                    cancellationToken.ThrowIfCancellationRequested();
                }
            }
            
            return ini;
        }
        catch (Exception ex)
        {
            Log.Error($"{ex}");
            return default;
        }
    }
    public static async Task WriteCSVAsync(string path,List<List<string>> contents, char split, Encoding encoding, CancellationToken cancellationToken = default(CancellationToken))
    {
        try
        {
            StringBuilder stringBuilder = new StringBuilder() ;
            foreach(var line in contents)
            {
                foreach (var col in line)
                {
                    stringBuilder.Append($"{col}{split}");
                }
                if(cancellationToken.IsCancellationRequested)
                {
                    cancellationToken.ThrowIfCancellationRequested();
                }
                if (line.Count > 0)
                {
                    stringBuilder.Length--;
                    stringBuilder.AppendLine();
                }
            }
            await WriteAllTextAsync(path, stringBuilder.ToString(), encoding, cancellationToken);
        }
        catch (Exception ex)
        {
            Log.Error($"{ex}");
        }
    }
    public static async Task<List<List<string>>> ReadCSVAsync(string path,char[] splits, Encoding encoding, CancellationToken cancellationToken = default(CancellationToken))
    {
        var text =  await ReadTextAsync(path, encoding, cancellationToken);
        if (text.Length == 0)
            return default;
        try
        {
            List<List<string>> result = new List<List<string>>();
            foreach(var line in text.Split("\r\n"))
            {
                List<string> list = new List<string>();
                foreach(var col in line.Split(splits))
                {
                    list.Add(col);
                }
                if(cancellationToken.IsCancellationRequested)
                {
                    cancellationToken.ThrowIfCancellationRequested();
                }
                if (list.Count == 1 && list[0].Length == 0)
                    continue;
                result.Add(list);
            }
            return result;
        }
        catch (Exception ex)
        {
            Log.Error($"{ex}");
            return default;
        }
    }
    public static async Task WriteAllTextAsync(string path,string contents, CancellationToken cancellationToken = default(CancellationToken))
    {
        try
        {
            var dir = Path.GetDirectoryName(path);
            if (!Directory.Exists(dir))
                Directory.CreateDirectory(dir);

            await File.WriteAllTextAsync(path, contents, cancellationToken);
        }
        catch (Exception ex)
        {
            Log.Error($"{ex}");
            return;
        }
    }
    public static async Task WriteAllTextAsync(string path, string contents, Encoding encoding, CancellationToken cancellationToken = default(CancellationToken))
    {
        try
        {
            var dir = Path.GetDirectoryName(path);
            if (!Directory.Exists(dir))
                Directory.CreateDirectory(dir);

            await File.WriteAllTextAsync(path, contents, encoding, cancellationToken);
        }
        catch (Exception ex)
        {
            Log.Error($"{ex}");
            return;
        }
    }

    public static async Task WriteAllTextAsync(string path, byte[] bytes, Encoding encoding, CancellationToken cancellationToken = default(CancellationToken))
    {
        try
        {
            var dir = Path.GetDirectoryName(path);
            if (!Directory.Exists(dir))
                Directory.CreateDirectory(dir);

            await File.WriteAllBytesAsync(path, bytes, cancellationToken);
        }
        catch (Exception ex)
        {
            Log.Error($"{ex}");
            return;
        }
    }

    public static async Task<string> ReadTextAsync(string path, CancellationToken cancellationToken = default(CancellationToken))
    {
        try
        {
            if (!File.Exists(path))
                return default;

            return await File.ReadAllTextAsync(path, cancellationToken);
        }
        catch (Exception ex)
        {
            Log.Error($"{ex}");
            return default;
        }
    }

    public static async Task<string> ReadTextAsync(string path, Encoding encoding, CancellationToken cancellationToken = default(CancellationToken))
    {
        try
        {
            if (!File.Exists(path))
                return default;

            return await File.ReadAllTextAsync(path, encoding, cancellationToken);
        }
        catch (Exception ex)
        {
            Log.Error($"{ex}");
            return default;
        }
    }

    public static async Task<byte[]> ReadAsync(string path, CancellationToken cancellationToken = default(CancellationToken))
    {
        try
        {
            if (!File.Exists(path))
                return default;

            return await File.ReadAllBytesAsync(path,cancellationToken);
        }
        catch(Exception ex)
        {
            Log.Error($"{ex}");
            return default;
        }
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小鱼游戏开发

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值