根据当前时间生成年份、月份文件夹,在月份文件夹中生成以当天日期的EXCEL文件,通过扫码枪读取码值,并根据码值匹配相应的名称。

该博客介绍了一个自动化文件管理系统,根据当前时间生成年份和月份文件夹,并在相应目录下创建CSV文件。系统利用扫码枪读取条码值,匹配预设的名称并写入CSV文件,实现数据记录。同时,提供了UI界面用于显示扫码结果。
摘要由CSDN通过智能技术生成

**设计内容:**根据当前时间生成年份、月份文件夹,在月份文件夹中生成以当天日期的EXCEL文件,通过扫码枪读取码值,并根据码值匹配相应的名称。
一、生成年、月份文件

            #region 创建文件夹
            string year = DateTime.Now.Year.ToString() + "年";
            string month = DateTime.Now.Month.ToString() + "月";
            /*string day = DateTime.Now.Day.ToString() + "日";*/

            string file_path = "E:\\" + year + "\\" + month + "\\";

            if (!Directory.Exists(file_path))               //如果“日期”的文件不存在
            {
                Directory.CreateDirectory(file_path);       //创建一个“日期”的文件夹
            }
            #endregion

通过这段代码运行之后,你会发现在你的E盘下有一个2021年的文件夹,打开之后你会发现有一个月份文件夹
二、创建CSV文件,可用EXCEL打开
继续在初始化下写这段代码即可

     #region 创建CSV文件
            // 在上面的"8日"文件夹下创建一个以当前时间为名的CSV文件
            string time = DateTime.Now.ToString("yyyy-MM-dd");
            string file_path1 = "E:\\" + year + "\\" + month + "\\" + time + ".csv";
            FileInfo fi = new FileInfo(@"E:\\" + year + "\\" + month + "\\" + time + ".csv");
            StreamWriter sw = new StreamWriter(file_path1, true, UnicodeEncoding.GetEncoding("GB2312"));//"GB2312"代表的是简体字
            string time1 = DateTime.Now.ToString("HH:mm:ss");
            #endregion

三、接下来就是创建标头
首先判断CSV文件内是否有内容,如果没有内容写入内容,如果有则在下一行写入数据。如下方代码:

//加入一个逗号,表示定位到下一个单元格,加入一个回车符表示定位到一下行
 sw.Write("序号" + "," + "时间" + "," + "码值" + "," + "名称" + "\r"); 

四、在界面创建两个Textbox控件和一个清除按键
在这里插入图片描述
左侧代表扫码枪读入的数据,右侧显示码值代表的名称
扫码枪的程序代码如下:
(具体扫码枪如何使用,参考一下这个链接(https://blog.csdn.net/HEIMENGER/article/details/119205499))

if (e.KeyCode == Keys.Enter)
            {
                //获取条码资料
                string barcode = textBox1.Text.Trim();
                string year = DateTime.Now.Year.ToString() + "年";
                string month = DateTime.Now.Month.ToString() + "月";
                string time = DateTime.Now.ToString("yyyy-MM-dd");
                string file_path1 = "E:\\" + year + "\\" + month + "\\" + time + ".csv";
                FileInfo fi = new FileInfo(@"E:\\" + year + "\\" + month + "\\" + time + ".csv");
                StreamWriter sw = new StreamWriter(file_path1, true, UnicodeEncoding.GetEncoding("GB2312"));//"GB2312"代表的是简体字
                string time1 = DateTime.Now.ToString("HH:mm:ss");
                #region 判断条码值,并对应名称写入CSV文件
                if (barcode == "9787302447092")
                {
                    i = 2;
                    textBox2.Text = "vb.net实训设计";
                }
                else if (barcode == "9787115519184")
                {
                    i = 0;
                    textBox2.Text = "C#图解教程";
                }
                else if (barcode == "9787115193582")
                {
                    i = 1;
                    textBox2.Text = "C#图像处理算法";
                }
                else if (barcode == "B-83284CM/07")
                {
                    i = 3;
                    textBox2.Text = "Robot操作说明书";
                }
                #endregion

注意的是需要检测内部是否有内容:不要重复写入标题
写入数据代码如下:

 string[] mingcheng  = new string[] { "C#图解教程", "C#图像处理算法", "vb.net实训设计","Robot操作说明书" };
sw.Write(num + "," + time1 + "," + barcode + "," + mingcheng[i] + "\r")

全部代码参照下面链接
全部代码

以下是实现该功能的C#代码示例: ```csharp using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace FileMonitor { public partial class MainForm : Form { private FileSystemWatcher watcher; private int okCount; private int ngCount; private int totalCount; private double passRate; private int fileCount; private DataTable dataTable; public MainForm() { InitializeComponent(); InitializeWatcher(); LoadData(); } private void InitializeWatcher() { watcher = new FileSystemWatcher(); watcher.Path = @"C:\FolderToMonitor"; watcher.Filter = "*.txt"; watcher.IncludeSubdirectories = true; watcher.NotifyFilter = NotifyFilters.FileName | NotifyFilters.LastWrite; watcher.Created += new FileSystemEventHandler(OnCreated); watcher.EnableRaisingEvents = true; } private void OnCreated(object sender, FileSystemEventArgs e) { if (e.ChangeType == WatcherChangeTypes.Created) { string fileName = Path.GetFileNameWithoutExtension(e.FullPath); string extension = Path.GetExtension(e.FullPath); if (fileName.Length >= 27 && (extension == ".txt" || extension == ".TXT")) { string barcode = fileName.Substring(0, 27); string dateTime = File.GetCreationTime(e.FullPath).ToString("yyyy/MM/dd HH:mm:ss"); string result = extension.ToUpper() == ".PASSED.TXT" ? "PASS" : "FAIL"; AddToDataTable(barcode, dateTime, result); UpdateStatistics(result); ConvertToCsv(e.FullPath, barcode, dateTime, result); } } } private void AddToDataTable(string barcode, string dateTime, string result) { if (dataTable == null) { dataTable = new DataTable(); dataTable.Columns.Add("No."); dataTable.Columns.Add("Barcode"); dataTable.Columns.Add("DateTime"); dataTable.Columns.Add("Result"); dataGridView.DataSource = dataTable; } fileCount++; dataTable.Rows.Add(fileCount, barcode, dateTime, result); dataGridView.Rows[dataGridView.RowCount - 1].DefaultCellStyle.BackColor = result == "PASS" ? Color.LightGreen : Color.Red; } private void UpdateStatistics(string result) { if (result == "PASS") { okCount++; } else { ngCount++; } totalCount = okCount + ngCount; passRate = totalCount > 0 ? (double)okCount / totalCount : 0; UpdateTextBoxes(); SaveData(); } private void UpdateTextBoxes() { textBoxOkCount.Text = okCount.ToString(); textBoxNgCount.Text = ngCount.ToString(); textBoxTotalCount.Text = totalCount.ToString(); textBoxPassRate.Text = $"{passRate:P}"; } private void ConvertToCsv(string sourceFilePath, string barcode, string dateTime, string result) { string destFolderPath = @"C:\CsvFolder"; if (!Directory.Exists(destFolderPath)) { Directory.CreateDirectory(destFolderPath); } string destFilePath = Path.Combine(destFolderPath, $"{barcode}_{dateTime.Replace(":", "").Replace("/", "")}_{result}.csv"); using (StreamWriter writer = new StreamWriter(destFilePath)) { writer.WriteLine("Barcode,DateTime,Result"); writer.WriteLine($"{barcode},{dateTime},{result}"); } } private void LoadData() { string dataFilePath = Path.Combine(Application.StartupPath, "data.txt"); if (File.Exists(dataFilePath)) { string[] lines = File.ReadAllLines(dataFilePath); okCount = int.Parse(lines[0]); ngCount = int.Parse(lines[1]); totalCount = int.Parse(lines[2]); passRate = double.Parse(lines[3]); } UpdateTextBoxes(); } private void SaveData() { string dataFilePath = Path.Combine(Application.StartupPath, "data.txt"); using (StreamWriter writer = new StreamWriter(dataFilePath)) { writer.WriteLine(okCount); writer.WriteLine(ngCount); writer.WriteLine(totalCount); writer.WriteLine(passRate); } } } } ``` 该代码实现了以下功能: 1. 在窗体加载时,初始化文件夹监视器,并加载上次关闭软件时保存的测试数据。 2. 当新的TXT文件生成时,从文件获取条码、时间和烧录结果,将这些信息添加到DataGridview组件,并更新OK数、NG数、测试总数和合格率的TextBox组件。 3. 在DataGridview组件,用绿色表示PASS,用红色表示FAIL。 4. 将TXT文件转换为CSV格式,并将测试结果保存到另一个文件夹。 5. 在关闭软件时,保存当前测试数据,以便下次打开软件时加载。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

CWM6364

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

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

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

打赏作者

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

抵扣说明:

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

余额充值