微信导出账单只能导出三个月,多条记录进行合并
用法 点击按钮选择微信账单所在目录
// 定义一个静态字符串变量,用于存储用户选择的文件夹路径
public static string tpml1;
// 定义一个静态List<string>,用于存储待处理的所有CSV文件路径
public static List<string> filelist1 = new List<string>();
// button1_Click是按钮点击事件的处理函数
private void button1_Click(object sender, EventArgs e)
{
// 创建并初始化FolderBrowserDialog对象,用于让用户选择文件夹
test.FolderBrowserDialog path = new test.FolderBrowserDialog();
// 如果用户选择了文件夹并且点击了"确定"
if (path.ShowDialog(this) == DialogResult.OK)
{
// 将用户选择的文件夹路径赋值给tpml1
tpml1 = path.DirectoryPath;
// 删除已存在的合并统计文件(如果存在)
File.Delete(tpml1 + "\\微信账单合并统计.csv");
// 调用递归方法Director1遍历指定目录及其子目录下所有的CSV文件,并将文件路径添加到filelist1中
Director1(tpml1);
// 创建StreamWriter对象,以追加模式打开新的“微信账单合并统计.csv”文件,并设置默认编码格式
StreamWriter streamWriter = new StreamWriter(tpml1 + "\\微信账单合并统计.csv", append: true, Encoding.Default);
// 定义CSV文件的表头信息
string value = "交易时间,交易类型,交易对方,商品,收/支,金额(元),支付方式,当前状态,交易单号,商户单号,备注,其他\t,";
// 将表头写入新文件
streamWriter.WriteLine(value);
// 遍历收集到的所有CSV文件路径
foreach (string item1 in filelist1)
{
// 获取当前文件名
String filePath = @item1;
int lastIndex = filePath.LastIndexOf("\\");
String fileName = filePath.Substring(lastIndex + 1);
// 设置从第18行开始读取数据
int startFromLine = 18;
// 在label1控件上显示当前处理的文件名
label1.Text = fileName;
Application.DoEvents(); // 让界面立即刷新
// 使用FileStream和StreamReader打开并读取当前CSV文件
using (FileStream stream = new FileStream(item1, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
using (StreamReader reader = new StreamReader(stream, Encoding.Default))
{
for (int i = 0; !reader.EndOfStream; i++)
{
// 当读取到第18行及以后时,读取该行内容并将其与文件名一起写入合并后的文件
if (i + 1 >= startFromLine)
{
string line = reader.ReadLine();
streamWriter.WriteLine(line + "," + fileName);
}
else
{
// 跳过前16行
reader.ReadLine();
}
}
}
}
}
// 标记处理完成
label1.Text = "完成";
Application.DoEvents(); // 让界面立即刷新
// 关闭StreamWriter以释放资源
streamWriter.Close();
}
}
// 递归遍历指定目录及其子目录下的所有CSV文件,并将文件路径加入到filelist1中
private void Director1(string dir)
{
DirectoryInfo d = new DirectoryInfo(dir);
FileSystemInfo[] fsinfos = d.GetFileSystemInfos();
foreach (FileSystemInfo fsinfo in fsinfos)
{
// 如果是目录,则递归调用Director1方法
if (fsinfo is DirectoryInfo)
{
Director1(fsinfo.FullName);
}
// 如果是CSV文件,则将文件路径添加到filelist1中
else if (fsinfo.Extension == ".csv")
{
filelist1.Add(fsinfo.FullName);
}
}
}
//有什么需要的,放假期间可以免费开发
//感谢大家的点赞,收藏,转发,关注