PDA

View Full Version : حرفه ای: دسترسی به یک پوشه فقط از طریق یک نرم افزار در c#



behzadkhan
شنبه 16 مرداد 1395, 18:38 عصر
به سلام

و عرض خسته نباشید به اعضای سایت

در حال ساخت یک نرم افزار دبیرخانه می باشم.

در این نرم افزار باید شرایطی فراهم شود که وقتی نرم افزار من در حال اجرا می باشد. امکان دسترسی به یک پوشه خاص فقط از طریق نرم افزار من فراهم باشد.

مثلا من بتوانم یک فایل را به آن پوشه اضافه کنم.

اما

هیچ نرم افزاری دیگری نتواند این کار را انجام دهد.

از راهنمایی هایتان صمیمانه سپاسگذارم.

با تشکر

rambod18
شنبه 16 مرداد 1395, 19:36 عصر
http://stackoverflow.com/questions/4692981/c-sharp-blocking-a-folder-from-being-changed-while-processing/4693064#4693064


http://stackoverflow.com/questions/4198048/how-to-lock-folder-in-c-sharp

behzadkhan
شنبه 16 مرداد 1395, 23:00 عصر
با سلام

دوست عزیز

لینک زیر:

http://stackoverflow.com/questions/4692981/c-sharp-blocking-a-folder-from-being-changed-while-processing/4693064#4693064

مفید بود.

کد آن لینک:


var locks = new List<FileStream>();
var di = new DirectoryInfo(@"C:\Test");
foreach (var file in di.GetFiles()) {
var fs = new FileStream(file.FullName, FileMode.Open);
fs.Lock(0, 0);
locks.Add(fs);
}


================================================== =

فقط مشکل اینجاست که اگر تعداد فایل های چند هزار تا بود و همواره در حال افزایش بود آیا باز هم این روش کاربرد دارد؟

با تشکر

behzadkhan
یک شنبه 17 مرداد 1395, 17:50 عصر
با سلام

من از کد بالا برای محافظت از فایل های اصلی برنامه مثل dll ها کردم.

اما مشکل اینجا بود که دیگر خود نرم افزار نمی توانست از آن dll ها استفاده کند.

بنابراین کد را به شکل زیر :


List<string> lstRequirementFilename = new List<string>();
lstRequirementFilename.Add("AutoIt.dll");
lstRequirementFilename.Add("amirCalendar.dll");
lstRequirementFilename.Add("Aspose.Words.dll");
lstRequirementFilename.Add("Cyotek.Windows.Forms.ImageBox.dll");
lstRequirementFilename.Add("DevComponents.DotNetBar2.dll");
lstRequirementFilename.Add("DocumentFormat.OpenXml.dll");
lstRequirementFilename.Add("ExpTreeLib.dll");
lstRequirementFilename.Add("GetMethodOfEXE.dll");
lstRequirementFilename.Add("Interop.WIA.dll");
lstRequirementFilename.Add("itextsharp.dll");
lstRequirementFilename.Add("itextsharp.pdfa.dll");
lstRequirementFilename.Add("itextsharp.xtra.dll");
lstRequirementFilename.Add("MD.PersianDateTime.dll");
lstRequirementFilename.Add("SharpShell.dll");


string applicationPath = Path.GetDirectoryName(System.Reflection.Assembly.G etExecutingAssembly().Location) + "\\";
var locks = new List<FileStream>();
List<StreamReader> locks2 = new List<StreamReader>();

//var di = new DirectoryInfo(applicationPath);


for (int i = 0; i < lstRequirementFilename.Count; i++)
{
try
{
//var fs = new FileStream(applicationPath + lstRequirementFilename[i], FileMode.Open);
//fs.Lock(0, 0);
//locks.Add(fs);


var fs2 = new StreamReader(applicationPath + lstRequirementFilename[i]);
//fs.Lock(0, 0);
locks2.Add(fs2);
}
catch (Exception)
{




}
}


تغییر دادم.

و مشکلم برطرف شد.

حالا بعد از اجرای برنامه دیگر نمی توان آن فایل ها را تغییر داد.

================================================== ==============

البته این مشکل دیگر من را حل کرد
و
هنوز مشکل دسترسی به یک پوشه برطرف نشده است.

من باز هم می گویم ممکن هست در آن پوشه تعداد زیادی فایل و پوشه وجود داشته باشد.
حالا
اگر قرار باشد من از روش بالا استفاده کنم کار خیلی سخت می شود.

به نظرم یکی از روش های خوب این هست که به مانند نرم افزارهای محافظت از پوشه ها
بتوانم
روی یک پوشه پسورد بگذارم تا در این صورت فقط کسی که آن پسورد را دارد بتواند از آن پوشه استفاده کند.

======================لطفا مرا راهنمایی کنید===========================

با تشکر

behzadkhan
دوشنبه 18 مرداد 1395, 11:08 صبح
با سلام

دوستان عزیز

من یک نمونه کد پیدا کردم که روی یک پوشه پسورد می گذارد:
لیک:

http://www.codeproject.com/Articles/20880/Folder-protection-for-Windows-using-Csharp-and-con


اما

مشکل اینجاست که به درستی کار نمی کند یعنی پسورد روی پوشه می گذارد ولی وقتی می خواهیم وارد آن پوشه شویم نیازی به پسورد ندارد.

لطفا این کد را بررسی کنید.

تصویری از اجرا نرم افزار:

141913

با تشکر