PDA

View Full Version : چک کردن ایجاد فایل جدید در هارد



tara1367
سه شنبه 13 مرداد 1394, 09:33 صبح
سلام

دوستان کسی میتونه راهنمایی کنه که به محض اینکه مثلا در درایو D و پوشه Test فایلی اضافه شد بتونم اسم و مسیر فایل رو در دیتابیس ذخیره کنم؟

محمد رضا فاتحی
سه شنبه 13 مرداد 1394, 09:39 صبح
از fileSystemWatcher استفاده کن

محمد رضا فاتحی
سه شنبه 13 مرداد 1394, 09:43 صبح
اینم یه نمونه کد...
http://s3.picofile.com/file/8204158468/ThirdEye.rar.html

ژیار رحیمی
سه شنبه 13 مرداد 1394, 09:57 صبح
سلام .شما بهتره همیشه پوشه هایی که قرار ازشون استفاده کنی کنار فایل اصلی پروژه ت نگه داری و نحوه ذخیره سازی هم به پیشنهاد من از مسیر کامل(مسیر مطلق) فایل استفاده نکن (چون ممکنه رو سیستم دیگه درایو D نداشته باشه که این باعث خطا در برنامه ت میشه).اگر منظور به محض اینکه بطور مداوم در فاصله زمانی فرضا چن ثانیه چک کنه که فایل وجود دارد یا نه باید یه کنترل timer رو form بزاری و خاصیت Interval اونو رو هر مقدار ثانیه(1000=یک ثانیه) تنظیم کن و تو رویداد Tick کنترل Timer کد ها تو بنویس

private void timer1_Tick(object sender, EventArgs e)
{
//مسیر فایل بصورت نسبی و پوشه Temp کنار فایل اجرایی
if (System.IO.Directory.Exists(Application.StartupPat h+ @"\Temp"))
{
if (System.IO.File.Exists(Application.StartupPath + @"\Temp\myfile.txt"))
{
//کد ذخیره سازی در دیتابیس
System.IO.File.Delete(Application.StartupPath + @"\Temp\myfile.txt");
}
}

}

/////////////////////////////////////////////////////////////////////////////////////////////

private void timer1_Tick(object sender, EventArgs e)
{

//مسیر فایل بصورت مطلق و پوشه در درایو D
if (System.IO.Directory.Exists(@"D:\Temp"))
{
if (System.IO.File.Exists(@"D:\Temp\myfile.txt"))
{
//کد ذخیره سازی در دیتابیس
System.IO.File.Delete(@"D:\Temp\myfile.txt");
}
}
}

tara1367
سه شنبه 13 مرداد 1394, 10:30 صبح
ممنون از راهنمایی. اما من برای یک شرکت کار میکنم. که در واقع منشی روزانه فایل های اسکن شده رو برای مدیر شرکت روی پوشه ای خاص قرار میده. بنابراین هم مسیر همیشه ثابت هست و هم اینکه من اسم فایل جدید رو نمی دونم. فقط می خوام به محض ایجاد فایل جدید عملیات ذخیره انجام شه.

محمد رضا فاتحی
سه شنبه 13 مرداد 1394, 10:31 صبح
استفاده از تایمر یه سربار اضافه به سیستم اضافه می کنه ولی با استفاده از filesystemwatcher بصورت لحظه ای با رخدادن یکی از حالت های create,delete,rename,changed می شه از تغییرات اطلاع پیدا کرد

tara1367
سه شنبه 13 مرداد 1394, 10:47 صبح
استفاده از تایمر یه سربار اضافه به سیستم اضافه می کنه ولی با استفاده از filesystemwatcher بصورت لحظه ای با رخدادن یکی از حالت های create,delete,rename,changed می شه از تغییرات اطلاع پیدا کرد

تشکر چک کردم عالی بود . اما این فقط برای درایوهای سیستم هست. میدونید چطور میشه برای شبکه ازش استفتده کرد؟
مثلا: 192.168.142.4 پوشه Software

محمد رضا فاتحی
سه شنبه 13 مرداد 1394, 11:26 صبح
راحت ترین کار که فعلا کارت رو راه بندازه اینه
خودم با این دستور امتحان کردم متاسفانه خطا داد

FileSystemWatcher fsw = new FileSystemWatcher(@"\\192.168.0.10\software");
خطای آدرس نامعتبر داد... این طوری حلش کردم
پوشه اشتراکی روی سرور رو map کردم به آدرس Z و اینطوری تغییر دادم
FileSystemWatcher fsw = new FileSystemWatcher(@"z:\software");

اگه کسی دسترسی مستقیم رو بلده دریغ نکنه!!!!

tara1367
سه شنبه 13 مرداد 1394, 11:35 صبح
ممنون خیلی لطف کردین با کمی تغییر درست شد :


FileSystemWatcher fsw = new FileSystemWatcher(@"\\192.168.142.4\\Software\\");


ان شاالله همیشه موفق باشید.

tara1367
چهارشنبه 21 مرداد 1394, 10:32 صبح
خوب با راهنمایی شما با استفاده از FileSystemWatcher هر فایلی که در مسیر مورد نظر اضافه شود، مشخص میشود. حالا من میخوام با استفاده از Path ی که برگردانده میشود بتونم فایل رو باز کنم. مثلا :

System.Diagnostics.Process.Start(@"\\192.168.142.4\Software\1394
این درست کار میکنه. اما path ی که FileSystemWatcher برمی گرداند، به جای هر اسلش ، 2تا اسلش می ذاره یعنی:

System.Diagnostics.Process.Start(@"\\\\192.168.142.4\\Software\\1394
حالا من هر جوری با کد خواستم این اسلش اضافه رو بردارم بازم نمیشه.

tara1367
چهارشنبه 21 مرداد 1394, 11:53 صبح
دوستان کسی می تونه راهنمایی کنه؟
من میخوام به جای "\\" در تکست از "\" استفاده کنم . این دستور رو مینویسم ولی روی "\" ارور میده:

textBoxX1.Text = textBoxX1.Text.Replace("\\", "\");
اگرم هم علامت @ قبلش اضافه کنم باز هیچ تغییری ایجاد نمیشه:

textBoxX1.Text = textBoxX1.Text.Replace("\\", @"\");

محمد رضا فاتحی
چهارشنبه 21 مرداد 1394, 12:20 عصر
این ار رو بکنید ببنید درست میشه؟

char ch = (char)92;
textBoxX1.Text = textBoxX1.Text.Replace("\\", ch);

tara1367
شنبه 24 مرداد 1394, 09:58 صبح
ممنون مشکل قبلی با یه کم گول زدن برنامه حل شد. نام پوشه ها رو یکی یکی در listItem ریختم و بعد یکی یک اسلش گذاشتم.
اما مشکل جدید اینه که در مسیر دهی برای باز کردن فایل، نام پوشه انگلیسی که space داشته باشه مشکلی نداره. اما اگر بخوام در مسیر دهی از نام فارسی با space استفاده کنم برنامه ارور میده:


sUsername = "فکس جدید"; FileSystemWatcher fsw = new FileSystemWatcher(@"\\192.168.142.4\\Fax\\1394\\" + sUsername + "\\", "*.pdf");



کسی می تونه راهنمایی کنه؟
با سپاس