PDA

View Full Version : استفاده از کامپوننت fileSystemWatcher و مشکل شناسایی مسیر از ListBox



golestan1
دوشنبه 19 بهمن 1394, 01:48 صبح
با یه حلقه درایو ها رو در لیست باکس2 لیست کردم بعد با یه حلقه دیگه ایتم های لیست باکس رو با مسیر این کامپوننت ست کردم
اما وقتی برنامه رو اجرا می کنم فقط تغییراتی رو که در اخرین درایو لیست باکس2 اد شده رو نشان میده
به فرض اینکه اخرین درایو اد شده در لیست باکس2 درایو G باشد تغییراتی که درون فایل های این درایو باشد رو لیست می کنه

سوال دوم چگونه میشه یکی از درایو ها رو از لیست باکس 2 حذف کرد

Mahmoud.Afrad
دوشنبه 19 بهمن 1394, 15:17 عصر
به ازای هر مسیری که میخواهید تحت نظر باشه باید یک FileSystemWatcher مجزا داشته باشید.

private List<FileSystemWatcher> _fsWatcherList;

private void Form1_Load(object sender, EventArgs e)
{
_fsWatcherList = new List<FileSystemWatcher>();
foreach (DriveInfo drv in DriveInfo.GetDrives())
{
if (drv.IsReady)
{
listBox2.Items.Add(drv.Name);
FileSystemWatcher fsWatcher = new FileSystemWatcher();
fsWatcher.Path = drv.Name;
fsWatcher.IncludeSubdirectories = true;
fsWatcher.EnableRaisingEvents = true;
fsWatcher.Created += fileSystemWatcher_Affected;
fsWatcher.Deleted += fileSystemWatcher_Affected;
fsWatcher.Renamed += fileSystemWatcher_Affected;
_fsWatcherList.Add(fsWatcher);
}
}
}

private void fileSystemWatcher_Affected(object sender, System.IO.FileSystemEventArgs e)
{
listBox1.Invoke(new MethodInvoker(delegate
{
listBox1.Items.Add("File : " + e.FullPath + "\t | " + e.ChangeType + " at : " + DateTime.Now);
}));
}

golestan1
دوشنبه 19 بهمن 1394, 16:44 عصر
اگه بخوام درایو ویندوز رو تحت نظر نگیره چه کدی لازمه

Mahmoud.Afrad
دوشنبه 19 بهمن 1394, 17:39 عصر
کد زیر درایو ویندوز رو بدست میاره. چک کنید درایوی که میخواهید تحت نظر باشه با درایو ویندوز یکی نباشه
string winDrive = System.IO.Path.GetPathRoot(Environment.SystemDirec tory);

golestan1
دوشنبه 19 بهمن 1394, 18:55 عصر
کد زیر درایو ویندوز رو بدست میاره. چک کنید درایوی که میخواهید تحت نظر باشه با درایو ویندوز یکی نباشه
string winDrive = System.IO.Path.GetPathRoot(Environment.SystemDirec tory);

تشکر از استاد Mahmoud.Afrad (http://barnamenevis.org/member.php?71297-Mahmoud-Afrad) من این کد رو دارم و فک کنم باید یه دستور شرطی بزارم و یا به انتهای شرط قبلی اضافه کنم تا درایو ویندوز رو اد نکنه همون شرط اد نکردن درایو ویندوز رو بلد نیستم

Mahmoud.Afrad
دوشنبه 19 بهمن 1394, 21:57 عصر
چیز سختی نیست

string winDrive = System.IO.Path.GetPathRoot(Environment.SystemDirec tory);
foreach (DriveInfo drv in DriveInfo.GetDrives())
{
if (drv.IsReady && drv.Name != winDrive)
{