недавно мой друг попросил меня написать ему программу, которая должна уметь определять, что к компьютеру была присоединена флешка и после этого должна выполнить некоторые действия.
ему хотелось, чтобы с компьютера были скопированы необходимые файлы на флешку.
я подумал и не стал реализовывать всяческое копирование, а сделал основу для модульной автоматизации ;)
программа была написана на c#. через заданный промежуток времени проверяет наличие removable диска с заданной меткой. после этого запускает cmd файл и передает ему в качестве параметра имя диска.
программа запускается из командной строки безо всякой формы. в качестве параметра передается файл в котором заданы параметры (в каждой строке): метка диска, интервал обновления, путь к cmd файлу.
using System;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Windows.Forms;
namespace Copy2Flash
{
static class Program
{
private static bool isSyncOk;
private static String diskLabelName;
private static int timeInterval = 1000;
private static String execFilePath;
[STAThread]
static void Main(string[] args)
{
if (args != null && args.Length > 0)
{
String iniFilePath = args[0];
if (File.Exists(iniFilePath))
{
try
{
var file = new StreamReader(iniFilePath);
try
{
diskLabelName = file.ReadLine();
timeInterval = Convert.ToInt32(file.ReadLine());
execFilePath = file.ReadLine();
}
catch
{
}
finally
{
file.Close();
}
}
catch
{
}
}
}
var timer = new Timer();
timer.Tick += TimerEventProcessor;
timer.Interval = timeInterval;
timer.Start();
Application.Run();
timer.Stop();
}
private static void TimerEventProcessor(Object myObject, EventArgs myEventArgs)
{
var removableDrives = from d in DriveInfo.GetDrives() where d.DriveType == DriveType.Removable select d;
//var removableDrives = DriveInfo.GetDrives().Where(d => d.DriveType == DriveType.Removable);
bool isDiskFound = false;
string driveName = null;
foreach (var removableDrive in removableDrives)
{
if (removableDrive.IsReady)
{
if (!String.IsNullOrEmpty(diskLabelName) && removableDrive.VolumeLabel.ToLower() == diskLabelName.ToLower())
{
isDiskFound = true;
driveName = removableDrive.Name;
break;
}
}
}
if (isDiskFound && !isSyncOk)
{
if (!String.IsNullOrEmpty(execFilePath))
{
try
{
var process = new Process();
var pInfo = new ProcessStartInfo(execFilePath, driveName);
pInfo.WindowStyle = ProcessWindowStyle.Hidden;
process.StartInfo = pInfo;
process.Start();
process.WaitForExit();
//int exitCode = process.ExitCode;
process.Close();
}
catch
{
}
}
isSyncOk = true;
}
else if (!isDiskFound && isSyncOk)
{
isSyncOk = false;
}
}
}
}
Комментариев нет:
Отправить комментарий