PDA

View Full Version : آموزش: قفل كردن پوشه با كد نويسي



juza66
چهارشنبه 23 مرداد 1392, 20:01 عصر
سلام دوستان

نحوه قفل كردن پوشه با كد نويسي رو براي دوستان شرح ميدم البته با ذكر اينكه تمامي مطالب برگرفته از سايت c-sharp.ir (http://c-sharp.ir) هستش و بنده فقط به اشتراك ميذارم براي دوستان كه استفاده كنند.

در این مقاله قصد داریم یک فولدر را با استفاده از کد نویسی قفل کنیم بصورتی که کاربر نتواند وارد آن شود.
نمیخواهم که وارد مطالب جانبی از جمله طریقه ی انتخاب فولدر و چیزهای دیگر شوم ، پس کد را در رویداد لود فرم مینویسیم و خودمان آدرس فولدر را مستقیما در کد نویسی وارد میکنیم.
برای قفل کردن فولدر از متدی به نام SetAccessControl موجود در کلاس DirectoryInfo استفاده میکنیم و خود این کلاس نیز در فضای نامی System.IO قرار دارد پس قبل از هر کاری این فضای نامی را معرفی میکنیم.

using System.IO;

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

DirectoryInfo di = new DirectoryInfo("d:\\folder");

اگر متد SetAccessControl مخصوص به di را بنویسید خواهید دید که یک شی از کلاس DirectorySecurity بعنوان پارامتر ورودی از شما میخواهد ، پس یک شی از این کلاس بسازید :d
اما قبل از این کار فضای نامی مخصوص آنرا نیز در بالا معرفی کنید.

using System.Security.AccessControl;

و


DirectorySecurity ds = di.GetAccessControl();

کاری که ما تا اینجا انجام دادیم این است که ابتدا فولدر را معرفی کردیم و اکسس کنترل آنرا در شی ds قرار دادیم حالا میتوانیم با استفاده از متد AddAccessRule روی آن قانون دسترسی معرفی کنیم ، پس ابتدا یک قانون دسترسی معرفی می کنیم و آنرا به این متد میدهیم :

FileSystemAccessRule ar = new
FileSystemAccessRule(Environment.UserDomainName+"\\"+Environment.UserName, FileSystemRights.FullControl, AccessControlType.Deny);
ds.AddAccessRule(ar);

دوخط بالا شلوغ به نظر میرسند ، پس توضیح میدهم ، در خط اول برای ساخت یک شی از نوع FileSystemAccessRule باید در پارامتر اول کاربری که میخواهیم این قانون دسترسی به آن نسبت داده شود وارد میکنیم ، که به این صورت عمل میکنیم ابتدا نام کامپیوتر و سپس “\” و نام کاربری را وارد میکنیم که برای کاربر جاری میتوانیم از کلاس Environment کمک بگیریم.
در پارامتر دوم نوع دسترسی مثلا Delete ، Create و غیره را تعریف میکنیم که ما از FullControl استفاده میکنیم و در نهایت هم یا Allow یا Deny را اعمال میکنیم.
به زبان ساده ما گفته ایم کاربر جاری ، هیچ نوع دسترسی به این فولدر ندارد.
در نهایت این قانون دسترسی را با متد AddAccessRule به لیست قوانین این فولد اضافه میکنیم.
جمله ای که بالا گفتم اشتباه است :d ما فقط یک شی از DirectorySecurity ساختیم و به آن قانون اضافه کردیم.
با di.GetAccessControl تنها DirectorySecurity مان را مقدار دهی اولیه کردیم و هنوز به فولدر نسبت داده نشده است پس باید این DirectorySecurity را به فولدر نسبت دهیم :

di.SetAccessControl(ds);

برای باز کردن مجدد فولد از متد RemoveAccessRule استفاده کنید.
موفق باشید

کد کامل قفل کردن فولدر :

DirectoryInfo di = new DirectoryInfo("d:\\folder");
2DirectorySecurity ds = di.GetAccessControl();
3FileSystemAccessRule ar = new FileSystemAccessRule(Environment.UserDomainName+"\\"+Environment.UserName, FileSystemRights.FullControl, AccessControlType.Deny);
4ds.AddAccessRule(ar);
5di.SetAccessControl(ds);

systam
چهارشنبه 06 شهریور 1392, 15:55 عصر
سلام
کد بالا یک کد ساده هست یعنی طرف اگه یک وارد باشه به راحتی میتونه بازش کنه
راهی دیگه نداره به هیچ عنوان کسی نتونه واردش بشه
فقط و فقط توسط برنامه این کار شدنی باشه ؟
من از این کد برای فقل کردن پوشه استفاده کردم
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim str As String = ""
Dim op As New FolderBrowserDialog
If op.ShowDialog = Windows.Forms.DialogResult.OK Then
str = op.SelectedPath
End If
AddDirectorySecurity(str, "Everyone", FileSystemRights.Read, AccessControlType.Deny)
End Sub
Private Sub AddDirectorySecurity(ByVal FileName As String, ByVal Account As String, ByVal Rights As FileSystemRights, ByVal ControlType As AccessControlType)
Dim Dinfo As New DirectoryInfo(FileName)
Dim DSecurity As DirectorySecurity = Dinfo.GetAccessControl()
DSecurity.AddAccessRule(New FileSystemAccessRule(Account, Rights, ControlType))
Dinfo.SetAccessControl(DSecurity)
End Sub
Private Sub RemoveDirectorySecurity(ByVal FileName As String, ByVal Account As String, ByVal Rights As FileSystemRights, ByVal ControlType As AccessControlType)
Dim Dinfo As New DirectoryInfo(FileName)
Dim DSecurity As DirectorySecurity = Dinfo.GetAccessControl()
DSecurity.RemoveAccessRule(New FileSystemAccessRule(Account, Rights, ControlType))
Dinfo.SetAccessControl(DSecurity)
End Sub

danialafshari
چهارشنبه 06 شهریور 1392, 15:58 عصر
سلام
در نمونه برنامه های کوچک و مفيد در سي شارپ (http://barnamenevis.org/showthread.php?64210-%D9%86%D9%85%D9%88%D9%86%D9%87-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%87%D8%A7%DB%8C-%DA%A9%D9%88%DA%86%DA%A9-%D9%88-%D9%85%D9%81%D9%8A%D8%AF-%D8%AF%D8%B1-%D8%B3%D9%8A-%D8%B4%D8%A7%D8%B1%D9%BE) قرار میدادید بهتر بود

juza66
چهارشنبه 06 شهریور 1392, 16:47 عصر
سلام
کد بالا یک کد ساده هست یعنی طرف اگه یک وارد باشه به راحتی میتونه بازش کنه
راهی دیگه نداره به هیچ عنوان کسی نتونه واردش بشه
فقط و فقط توسط برنامه این کار شدنی باشه ؟
من از این کد برای فقل کردن پوشه استفاده کردم

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim str As String = ""
Dim op As New FolderBrowserDialog
If op.ShowDialog = Windows.Forms.DialogResult.OK Then
str = op.SelectedPath
End If
AddDirectorySecurity(str, "Everyone", FileSystemRights.Read, AccessControlType.Deny)
End Sub
Private Sub AddDirectorySecurity(ByVal FileName As String, ByVal Account As String, ByVal Rights As FileSystemRights, ByVal ControlType As AccessControlType)
Dim Dinfo As New DirectoryInfo(FileName)
Dim DSecurity As DirectorySecurity = Dinfo.GetAccessControl()
DSecurity.AddAccessRule(New FileSystemAccessRule(Account, Rights, ControlType))
Dinfo.SetAccessControl(DSecurity)
End Sub
Private Sub RemoveDirectorySecurity(ByVal FileName As String, ByVal Account As String, ByVal Rights As FileSystemRights, ByVal ControlType As AccessControlType)
Dim Dinfo As New DirectoryInfo(FileName)
Dim DSecurity As DirectorySecurity = Dinfo.GetAccessControl()
DSecurity.RemoveAccessRule(New FileSystemAccessRule(Account, Rights, ControlType))
Dinfo.SetAccessControl(DSecurity)
End Sub



درسته دوست عزیز،

این دو لینک جدیده

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

http://www.bitsbyta.com/2011/01/lock-and-unlock-folder-cnet.html


سلام
در نمونه برنامه های کوچک و مفيد در سي شارپ (http://barnamenevis.org/showthread.php?64210-%D9%86%D9%85%D9%88%D9%86%D9%87-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%87%D8%A7%DB%8C-%DA%A9%D9%88%DA%86%DA%A9-%D9%88-%D9%85%D9%81%D9%8A%D8%AF-%D8%AF%D8%B1-%D8%B3%D9%8A-%D8%B4%D8%A7%D8%B1%D9%BE) قرار میدادید بهتر بود

بله آقای افشاری :لبخند:
بی زحمت خودتون زحمت انتقالش رو بکشید ( ممنون )

systam
چهارشنبه 06 شهریور 1392, 17:07 عصر
مثلا مثل پوشه انتی ویروس nod32 هر کار بکنی فایل داخل نه اضافه نه پاک میشه

juza66
چهارشنبه 06 شهریور 1392, 17:32 عصر
آنتی ویروس NOD32 از سرویس استفاده میکنه و همیشه این پوشه رو حفظ میکنه، چون از محتویات درون پوشه یا dll هاش داره استفاده میکنه، خب وقتی بخوای Del کنی Error میده که این پوشه قابل پاک شدن نیست; بگو خب :متفکر:

تا حالا دو سه تا برنامه دیدم که یک سرویس برای نگهداری پوشه اجرا میکنن که نذارن اون پوشه حذف شه یا پوشه های که مخفی کردن یا قفل کردن قابل نمایش یا بازکردن باشه; بگو خب :متفکر:

با برنامه WinForm هم میشه ولی باید برنامه رو بندازی Startup و برنامه روی مخفی کنی فقط از پروسس اجرا بشه اینجور طرف بخواد حذف کنه میگه این پوشه غیرقابل حذف می باشد چرا چون برنامه در حال اجراست و مخفیه ..

systam
چهارشنبه 06 شهریور 1392, 17:34 عصر
با برنامه WinForm هم میشه ولی باید برنامه رو بندازی Startup و برنامه روی مخفی کنی فقط از پروسس اجرا بشه اینجور طرف بخواد حذف کنه میگه این پوشه غیرقابل حذف می باشد چرا چون برنامه در حال اجراست و مخفیه ..
سلام
ممنون میشم یک نمونه مثال بزنی برام

juza66
چهارشنبه 06 شهریور 1392, 17:45 عصر
الان برنامه ویژوال رو این سیستم ندارم حتما تا شب اگه عمری باقی موند برات میذارم ..


فقط نحوه اجراش رو بگم:

یک پوشه میسازی ; بگو خب

برنامه ای ایجاد میکنی تویی Load فرم مینویسی ;()hide خب تا اینجا برنامه نویسی ; بگو خب
تویی همون لود فرم یه شورکات بنداز تویی استارت اپ ; بگو خب

خب تا اینجا شما یک پوشه داری و یک فایل مخفی که شورکاتی تویی استارت آپ داره; بگو خب

برای انجامش شما فایلی که درست کردی اجرا کن (خوب مخفی چیزی نیست درست؟) حال همین پوشه رو حذف کن (حذف نمیشه درست؟) چرا؟

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

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

حالا بیشتر برات میگردم که این راحل رو هم حل کنی

موفق باشی ...

systam
چهارشنبه 06 شهریور 1392, 17:50 عصر
خب خب خب خب خب خب
پس باید پوشه رو در گیر برنامه کرد
نه بشه روی پوشه کار انجام داد نه بشه محتویات داخلشو دست کاری کرد

Yanehsar
پنج شنبه 07 شهریور 1392, 19:35 عصر
درسته دوست عزیز،

این دو لینک جدیده

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

http://www.bitsbyta.com/2011/01/lock-and-unlock-folder-cnet.html



بله آقای افشاری :لبخند:
بی زحمت خودتون زحمت انتقالش رو بکشید ( ممنون )

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

juza66
پنج شنبه 07 شهریور 1392, 19:46 عصر
فکر کنم شما برای خواندن و نوشتن بیایی فولدر رو از حالت قفل در بیاری (در دستور نویسی فکر کنم) بعد از نوشتن دوباره پوشه رو قفل کنی

دوتا سرچ کوچیک تو همین موارد زدم این دوتا لینک گیرم اومد شما نگاه کنید شاید بدرد بخوره


http://stackoverflow.com/questions/17210760/directory-created-by-c-sharp-program-thread-is-locked

و

stackoverflow.com/questions/5064727/c-sharp-locking-in-threads-with-mixed-file-and-folder-usage-thread-safety (http://barnamenevis.org/stackoverflow.com/questions/5064727/c-sharp-locking-in-threads-with-mixed-file-and-folder-usage-thread-safety)


اگر تونستم تو برنامه نویسی چنین کاری رو انجام بدم حتما به اشتراک میذارم

موفق باشی

matrix-program
پنج شنبه 07 شهریور 1392, 21:05 عصر
سلام
کد بالا یک کد ساده هست یعنی طرف اگه یک وارد باشه به راحتی میتونه بازش کنه
راهی دیگه نداره به هیچ عنوان کسی نتونه واردش بشه
فقط و فقط توسط برنامه این کار شدنی باشه ؟
من از این کد برای فقل کردن پوشه استفاده کردم
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim str As String = ""
Dim op As New FolderBrowserDialog
If op.ShowDialog = Windows.Forms.DialogResult.OK Then
str = op.SelectedPath
End If
AddDirectorySecurity(str, "Everyone", FileSystemRights.Read, AccessControlType.Deny)
End Sub
Private Sub AddDirectorySecurity(ByVal FileName As String, ByVal Account As String, ByVal Rights As FileSystemRights, ByVal ControlType As AccessControlType)
Dim Dinfo As New DirectoryInfo(FileName)
Dim DSecurity As DirectorySecurity = Dinfo.GetAccessControl()
DSecurity.AddAccessRule(New FileSystemAccessRule(Account, Rights, ControlType))
Dinfo.SetAccessControl(DSecurity)
End Sub
Private Sub RemoveDirectorySecurity(ByVal FileName As String, ByVal Account As String, ByVal Rights As FileSystemRights, ByVal ControlType As AccessControlType)
Dim Dinfo As New DirectoryInfo(FileName)
Dim DSecurity As DirectorySecurity = Dinfo.GetAccessControl()
DSecurity.RemoveAccessRule(New FileSystemAccessRule(Account, Rights, ControlType))
Dinfo.SetAccessControl(DSecurity)
End Sub
واقعا ینی هیچکی دقت نکرد که این کد ویبیه نه سیشارپ؟؟؟؟؟؟

برای اینکه اسپم نشه من تست کردم نشد

juza66
پنج شنبه 07 شهریور 1392, 22:34 عصر
دوست عزیز زیاد مهم نیست که سی شارپه یا ویبی
مهم اینکه برنامه نویسی دات نته و گفتگوی دوستانه ای جهت حل مشک

در ضمن بعدا میشه کد رو به سی یا ویبی تبدیل کرد

ghasemloo
جمعه 08 شهریور 1392, 13:39 عصر
من یه سوالی دارم
نمیشه یه فرم ساخت و داخل تایمر نوشت اگه پوشه مخفی بود که هیچ مخفی بمونه واگرنه
دوباره پوشه رو مخفی کن و برنامه در ضمیمه ویندوز همیشه در حال کار باشه.....
اینطور میشه یه کلکی سوار کرد!!!عایا

systam
شنبه 09 شهریور 1392, 09:10 صبح
سلام
باید کاری کرد که کلا پوشه و فایلهای داخلش رو در گیر کرد در برنامه تا نشه از تغییرات احتمالی جلوگیری کرد
برای این کار دوتا برنامه لازم داریم برنامه اول همون برنامه اصلی و دیگری یه برنامه مخفی دور از دید کاربر که پوشه و فایلهای داخلش رو درگیر کنه
مثلا یک حلقه بزاریم تمام عکس موجود در پوشه رو در imagelist بیاریم بعد فکر کنم بشه


این کار درست هست یا نه

systam
یک شنبه 10 شهریور 1392, 19:07 عصر
سلام
توی نت زیاد گشتم در این باره
خیلی ها پیشنهاد این کار رو دادند درسته (http://www.ultimateprogrammingtutorials.info/2012/08/folder-locker-tutorial.html)

systam
یک شنبه 10 شهریور 1392, 19:29 عصر
اینم هست من که هر کاری میکنم کار نمیکنه (http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=672&lngWId=10)

systam
یک شنبه 10 شهریور 1392, 19:47 عصر
اینم هست نمیدونم چطوری باید استفاده کنم (http://vbcity.com/forums/t/163869.aspx)

mehrdad1991h
یک شنبه 10 شهریور 1392, 19:57 عصر
اینم هست نمیدونم چطوری باید استفاده کنم (http://vbcity.com/forums/t/163869.aspx)

VB هست این !!!!
چیش را نمیدونی ؟

systam
یک شنبه 10 شهریور 1392, 20:08 عصر
VB هست این !!!!
چیش را نمیدونی ؟
اون class اولی رو نمیدونم چطوری باید استفاده کنم

Fery666
پنج شنبه 11 مهر 1392, 13:30 عصر
سلام
کد بالا یک کد ساده هست یعنی طرف اگه یک وارد باشه به راحتی میتونه بازش کنه
راهی دیگه نداره به هیچ عنوان کسی نتونه واردش بشه
فقط و فقط توسط برنامه این کار شدنی باشه ؟
من از این کد برای فقل کردن پوشه استفاده کردم
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim str As String = ""
Dim op As New FolderBrowserDialog
If op.ShowDialog = Windows.Forms.DialogResult.OK Then
str = op.SelectedPath
End If
AddDirectorySecurity(str, "Everyone", FileSystemRights.Read, AccessControlType.Deny)
End Sub
Private Sub AddDirectorySecurity(ByVal FileName As String, ByVal Account As String, ByVal Rights As FileSystemRights, ByVal ControlType As AccessControlType)
Dim Dinfo As New DirectoryInfo(FileName)
Dim DSecurity As DirectorySecurity = Dinfo.GetAccessControl()
DSecurity.AddAccessRule(New FileSystemAccessRule(Account, Rights, ControlType))
Dinfo.SetAccessControl(DSecurity)
End Sub
Private Sub RemoveDirectorySecurity(ByVal FileName As String, ByVal Account As String, ByVal Rights As FileSystemRights, ByVal ControlType As AccessControlType)
Dim Dinfo As New DirectoryInfo(FileName)
Dim DSecurity As DirectorySecurity = Dinfo.GetAccessControl()
DSecurity.RemoveAccessRule(New FileSystemAccessRule(Account, Rights, ControlType))
Dinfo.SetAccessControl(DSecurity)
End Sub


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

juza66
چهارشنبه 01 مرداد 1393, 12:42 عصر
یک کلاس جهت قفل پوشه (به درخواست یکی از کاربران سایت)


using System;using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Windows.Forms;

namespace FolderHide
{
public partial class FolderLock : Form
{
public FolderLock()
{
InitializeComponent();
}

private const string SystemFileName = "Control Panel.{21EC2020-3AEA-1069-A2DD-08002B30309D}";
private const string PrivateFolderName = "Private Stuff";
private const string PasswordFileName = "lxm.lxm";
private int _passwordTryCount;
private string _operation;
private string _currentPath;

private void FolderLock_Load(object sender, EventArgs e)
{
MaximumSize = Size;
MinimumSize = Size;
menuStrip1.Visible = false;
_currentPath = Path.GetDirectoryName(
System.Reflection.Assembly.GetExecutingAssembly(). GetName().CodeBase).Remove(0, 6);
pnlContainer.Visible = false;
toolStripStatusLabel1.Text = @"By:";
toolStripStatusLabel2.Text = @"Pawan Acharya";
}

private void Button1Click(object sender, EventArgs e)
{
if(string.IsNullOrEmpty(txtPass.Text.Trim()))
return;
switch (_operation)
{
case "Hide":
if (txtPass.Text.Trim() == GetPassword())
{
MakeInvisible();
txtPass.Text = "";
pnlContainer.Visible = false;
Close();
}
else
{
txtPass.Text = "";
MessageBox.Show(@"Invalid Password");
_passwordTryCount = _passwordTryCount + 1;
if (_passwordTryCount > 4)
{
MessageBox.Show(@"Too Many Invalid Entries");
Close();
}
}
break;
case "Show":
if (txtPass.Text.Trim() == GetPassword())
{
MakeVisible();
try
{
Process.Start(_currentPath);
}
catch (Exception)
{
}
txtPass.Text = "";
pnlContainer.Visible = false;
}
else
{
txtPass.Text = "";
MessageBox.Show(@"Invalid Password");
_passwordTryCount = _passwordTryCount + 1;
if (_passwordTryCount > 4)
{
MessageBox.Show(@"Too Many Invalid Entries");
Close();
}
}
break;
case "CNew":
CreateAPasswordFile();
MakeInvisible();
Close();
break;
case "CPwd":
if (txtPass.Text.Trim() == GetPassword())
{
CreateAPasswordFile();
MakeInvisible();
txtPass.Text = "";
pnlContainer.Visible = false;
Close();
}
else
{
txtPass.Text = "";
MessageBox.Show(@"Invalid Password");
_passwordTryCount = _passwordTryCount + 1;
if (_passwordTryCount > 4)
{
MessageBox.Show(@"Too Many Invalid Entries");
Close();
}
}
break;
}
}

private void CreateAPasswordFile()
{
if (File.Exists(_currentPath + @"\" + PasswordFileName))
{
var thisFile = new FileInfo(_currentPath + @"\" + PasswordFileName);
thisFile.Attributes = FileAttributes.Normal;

File.Delete(_currentPath + @"\" + PasswordFileName);
}
using (var file = new StreamWriter(_currentPath+@"\"+PasswordFileName))
{
file.WriteLine(EncodePassword(txtPass.Text.Trim()) );
}
var thisDir = new FileInfo(_currentPath + @"\" + PasswordFileName);
thisDir.Attributes = thisDir.Attributes = FileAttributes.System | FileAttributes.Hidden;
}

private bool IsPasswordFile()
{
return File.Exists(_currentPath + @"\" + PasswordFileName);
}

private bool CreatePrivateFolder()
{
var newPath = Path.Combine(_currentPath, PrivateFolderName);
if (!Directory.Exists(newPath))
{
Directory.CreateDirectory(newPath);
return true;
}
MessageBox.Show(@"Already Hiding A Folder Here. Select Diffrent Location.");
pnlContainer.Visible = false;
return false;
}

private bool IsPrivateFolder()
{
return Directory.Exists(_currentPath + @"\" + PrivateFolderName);
}

private bool IsSystemFolder()
{
return Directory.Exists(_currentPath + @"\" + SystemFileName);
}

private void MakeVisible()
{
Directory.Move(_currentPath + @"\" + SystemFileName, _currentPath + @"\" + PrivateFolderName);
var thisDir = new DirectoryInfo(_currentPath + @"\" + PrivateFolderName);
thisDir.Attributes = FileAttributes.Normal;
}

private void MakeInvisible()
{
Directory.Move(_currentPath + @"\" + PrivateFolderName, _currentPath + @"\" + SystemFileName);
var thisDir = new DirectoryInfo(_currentPath + @"\" + SystemFileName);
thisDir.Attributes = FileAttributes.System | FileAttributes.Hidden | FileAttributes.Directory;
thisDir.Refresh();
}

private void Button2Click(object sender, EventArgs e)
{
folderBrowserDialog1.SelectedPath = _currentPath;
folderBrowserDialog1.ShowNewFolderButton = false;
var folderselected = false;
do
{
var result = folderBrowserDialog1.ShowDialog();
if (result == DialogResult.OK)
{
if (Directory.Exists(folderBrowserDialog1.SelectedPat h))
{
var dInfo = new DirectoryInfo(folderBrowserDialog1.SelectedPath);
var dRInfo = dInfo.Root;
if (dInfo.ToString() == dRInfo.ToString())
{
MessageBox.Show(@"Invalid Selection");
}
else
{
_currentPath = folderBrowserDialog1.SelectedPath;
folderselected = true;
}

}
}
else
{
return;
}

} while (!folderselected);
toolStripStatusLabel1.Text = @"Path ";
toolStripStatusLabel2.Text = folderBrowserDialog1.SelectedPath;
CheckActionForSelectedPath();
}

private void CheckActionForSelectedPath()
{
if (IsPrivateFolder())
{
if (MessageBox.Show(@"Hide This Folder?" + Environment.NewLine + @"You Can 'Change Folder Reference' OR 'Change Password', Selecting No", @"Options", MessageBoxButtons.YesNo) == DialogResult.Yes)
{
label1.Text = @"Enter Password To Hide";
_operation = "Hide";
pnlContainer.Visible = true;
}
else
{
menuStrip1.Visible = true;
}
}
else
{
if (!IsSystemFolder())
{
if (TryParentFolder())
{
CheckActionForSelectedPath();
return;
}
if (!CreatePrivateFolder())
return;
MessageBox.Show(@"Please Copy Files To The New Folder Created Named '" + PrivateFolderName + @"' Inside Selected Folder" + Environment.NewLine + @"If Folder Name Is Changed Data Will Not Be Hidden");
try
{
Process.Start(_currentPath);
}
catch (Exception)
{
}
label1.Text = @"Enter Password for Folder";
txtPass.UseSystemPasswordChar = true;
pnlContainer.Visible = true;
_operation = "CNew";
}
else
{
if (IsPasswordFile())
{
label1.Text = @"Enter Password To Show Hidden Content";
txtPass.UseSystemPasswordChar = true;
_operation = "Show";
pnlContainer.Visible = true;
}
else
{
MessageBox.Show(@"Password Not Found, For your Data Safety, The Folder Will Be Shown");
MakeVisible();
Close();
}
}
}
}

private void TxtPassKeyPress(object sender, KeyPressEventArgs e)
{
txtPass.BackColor = Color.White;
if (Char.IsNumber(e.KeyChar) || e.KeyChar == (char) 8) return;
txtPass.BackColor = Color.Red;
e.Handled = true;
}

private static string EncodePassword(string password)
{
var pass = password;
var a = pass.ToCharArray();
var enc = "";
foreach (var ch in a)
{
var code = "";
switch (ch)
{
case '0':
code = "*";
break;
case '1':
code = "&";
break;
case '2':
code = "!";
break;
case '3':
code = "0";
break;
case '4':
code = "j";
break;
case '5':
code = "x";
break;
case '6':
code = "4";
break;
case '7':
code = "v";
break;
case '8':
code = "b";
break;
case '9':
code = "y";
break;
}
enc = enc + code;
}
return enc;
}

private string GetPassword()
{
var code = File.ReadAllText(_currentPath + @"\" + PasswordFileName);
return DecodePassword(code);
}

private static string DecodePassword(string code)
{
var a = code.ToCharArray();
var pass = "";
foreach (var ch in a)
{
var thispass = "";
switch (ch)
{
case '*':
thispass = "0";
break;
case '&':
thispass = "1";
break;
case '!':
thispass = "2";
break;
case '0':
thispass = "3";
break;
case 'j':
thispass = "4";
break;
case 'x':
thispass = "5";
break;
case '4':
thispass = "6";
break;
case 'v':
thispass = "7";
break;
case 'b':
thispass = "8";
break;
case 'y':
thispass = "9";
break;
}
pass = pass + thispass;
}
return pass;
}

private void ChangePasswordToolStripMenuItemClick(object sender, EventArgs e)
{
_operation = "CPwd";
txtPass.UseSystemPasswordChar = false;
pnlContainer.Visible = true;
label1.Text = @"Provide New Password";
}

private void PnlContainerVisibleChanged(object sender, EventArgs e)
{
if(pnlContainer.Visible)
{
button2.Location=new Point(274, 27);
button2.Size = new Size(56, 89);
button2.Text = @"Browse Another Folder";
button2.Focus();
}
else
{
button2.Location = new Point(27, 27);
button2.Size = new Size(274,89);
button2.Text = @"Browse A Folder Where You Wish To Hide/Retrive Data From";
}
}

private bool TryParentFolder()
{
var dInfo = new DirectoryInfo(_currentPath);
var pDInfo = dInfo.Parent.FullName;
if(Directory.Exists(pDInfo + @"\" + PrivateFolderName)|| Directory.Exists(pDInfo + @"\" + SystemFileName) || File.Exists(pDInfo + @"\" + PasswordFileName))
{
var result = MessageBox.Show(@"Did You Intend to Hide Contents?"+Environment.NewLine+@"You Must Select The Parent Folder Of Folder Named '"+PrivateFolderName+@"' To Hide Folder.",@"Folder To Hide Detected On This Path",MessageBoxButtons.YesNo);
if(result==DialogResult.Yes)
{
_currentPath = pDInfo.ToString();
toolStripStatusLabel1.Text = @"Path ";
toolStripStatusLabel2.Text = _currentPath;
return true;
}
return false;
}
return false;
}
}
}




و در آخر لینک سایت منبع:
http://www.getcodesamples.com/src/81A6E6EA/EE63DF82

systam
چهارشنبه 01 مرداد 1393, 14:04 عصر
یک کلاس جهت قفل پوشه (به درخواست یکی از کاربران سایت)
استاد باید چطوری در پروژه این کلاس رو استفاده کنیم

mohammadsamadi1377
چهارشنبه 01 مرداد 1393, 15:54 عصر
اول این یک کلاس نیست
دوم این ک شما اگه بیای دو برنامه مجزا بسازید ک هر کدوم اون یکی رو اجرا کنه توی فولدر شاید مشکلتون حل بشع

juza66
چهارشنبه 01 مرداد 1393, 16:57 عصر
این سورس
http://charp.persiangig.com/Simple%20folder%20hiding%20technique%20for%20learn ers%20of%20C%23.zip

juza66
چهارشنبه 01 مرداد 1393, 16:58 عصر
اول این یک کلاس نیست
دوم این ک شما اگه بیای دو برنامه مجزا بسازید ک هر کدوم اون یکی رو اجرا کنه توی فولدر شاید مشکلتون حل بشع


بله اشتباه متوجه شدم