View Full Version : ُShare کردن یک فولدر
hadisalahi2
شنبه 09 شهریور 1392, 18:06 عصر
با سلام به دوستان
یک فولدر رو میخوام شیر کنم
همین
کلی هم جستجو کردم
با این دستور میشه NetShareAdd
اما هم توی این سایت و هم توی اینترنت یک کد درست و درمون پیدا نکردم که کارم رو راه بندازه
یا شاید هم من روش استفادش رو بلد نبودم
دوستان کسی هست که من رو راهنمایی کنه؟
hadisalahi2
شنبه 09 شهریور 1392, 19:02 عصر
داداش این رو برای یک چیز دیگه میخوام
همون اشتراک گذاری ساده
خیلی هم توی اینترنت گشتم ، ولی کد به درد بخوری پیدا نکردم
میشه اگه کد خوب و شسته و رفته ای داری برام بزاری
ممنونت میشم
Mask
شنبه 09 شهریور 1392, 20:06 عصر
اگه کارتون فقط یه اشتراک سازی ساده باشه ، صلاح نیست درگیر کد و برنامه نویسی زیاد باشید . میتونید به صورت کامند همه این کارها رو انجام بدید
البته به صورت کامند قابلیت پرمیشن بندی هم دارید.
آموزش مایکروسافت (http://technet.microsoft.com/en-us/library/cc739966(v=ws.10).aspx)
hadisalahi2
یک شنبه 10 شهریور 1392, 08:54 صبح
داداش من برای دلفی میخواستم
این کار رو باید از داخل دلفی انجام بدم
خودم هم میدونستم از نت شیر باید استفاده کنم
اما چه طوری رو بلد نیستم
یک مثال ساده دلفی ، کا رمن رو راه میندازه
hadisalahi2
یک شنبه 10 شهریور 1392, 11:35 صبح
دوستان یک یونیت گرفتم ، اما روش کار رو باهاش بلد نیستم
دوستان اگه میشه این کامپوننت رو نصب کنند و در صورتی که روش کار رو یاد گرفتند به ما هم یاد بدند
Mask
یک شنبه 10 شهریور 1392, 14:08 عصر
داداش من برای دلفی میخواستم
این کار رو باید از داخل دلفی انجام بدم
خودم هم میدونستم از نت شیر باید استفاده کنم
اما چه طوری رو بلد نیستم
یک مثال ساده دلفی ، کا رمن رو راه میندازه
خوب معلومه که باید از این ابزار کامندی در دلفی استفاده کنید.
اگه واقعا استفاده از ابزارهای کامند لاین رو در دلفی بلد نباشید ، پیشنهاد میکنم ، حتما فیلمهای آقای عشایری رو ببینید و مجدد بحثهای پایه ای رو مرور کنید.
uses ShellAPI;
procedure TForm1.BTN_ShareClick(Sender: TObject);
begin
if DirectoryExists(E_Path.Text) then
begin
ShellExecute(Handle, 'open', PChar('cmd.exe'),
PChar('/c ' + 'net share ' + E_ShareName.Text + '=' + E_Path.Text),
nil, SW_HIDE);
ShowMessage('Shared folder');
end
else
ShowMessage('Can not finde folder');
end;
procedure TForm1.BTN_DeleteShareClick(Sender: TObject);
begin
if DirectoryExists(E_Path.Text) then
begin
ShellExecute(Handle, 'open', PChar('cmd.exe'),
PChar('/c ' + 'net share /d ' + E_Path.Text), nil, SW_HIDE);
ShowMessage('Without the shared folder');
end
else
ShowMessage('Can not finde folder');
end;
hadisalahi2
یک شنبه 10 شهریور 1392, 16:37 عصر
خوب معلومه که باید از این ابزار کامندی در دلفی استفاده کنید.
این رو نمیدونستم
اگه واقعا استفاده از ابزارهای کامند لاین رو در دلفی بلد نباشید ، پیشنهاد میکنم ، حتما فیلمهای آقای عشایری رو ببینید و مجدد بحثهای پایه ای رو مرور کنید.
چرا این مدل کد نویسی و استفاده از ShellExecute رو قبلا کار کردم
اما تا الان مورد پیش نیومده بود که این کار رو انجام بدم
در ضمن اگه لازم باشه حتما بحث های پایه ای رو مرور میکنم
چون هیچ موقع ندونستن عیب نیست ، بلکه نپرسیدم عیبه
در کدی که نوشتید ، E_Path.Text رو چه طوری باید آدرس یک کامیوتر دیگه رو بدم؟
این مثال شما ، مربوط به سیستم لوکال بود
این کامپوننت رو دیدید؟
چیزی دستگیرتون شد؟
loo30fer
یک شنبه 10 شهریور 1392, 17:32 عصر
فقط نیازه بود خودتون و گوگل رو به زحمت بندازین :
http://thundaxsoftware.blogspot.com/2009/12/sharing-and-unsharing-folder-with.html
hadisalahi2
یک شنبه 10 شهریور 1392, 17:46 عصر
خسته نباشی دلاور
این سایتی که نوشتی ، فیلتره
در ضمن من خیلی خودم رو توی گوگل به زحمت انداختم
اما کد درست و درمون گیرم نیومد
همه فراتر از چیزی بود که من میخواستم
و کلی کد های اضافی داشت
hadisalahi2
یک شنبه 10 شهریور 1392, 17:46 عصر
اگه میشه شما کدش رو اینجا قرار بده
loo30fer
یک شنبه 10 شهریور 1392, 18:41 عصر
این کد رو در قالب یک Unit ذخیره و به برنامتون Use کنید :
unit uNetShare;
interface
uses
SysUtils, Windows;
type
SHARE_INFO_2 = record
shi2_netname: LPWSTR;
shi2_type: DWORD;
shi2_remark: LPWSTR;
shi2_permissions: DWORD;
shi2_max_uses: DWORD;
shi2_current_uses: DWORD;
shi2_path: LPWSTR;
shi2_passwd: LPWSTR;
end;
PSHARE_INFO_2 = ^SHARE_INFO_2;
const
STYPE_DISKTREE = 0;
STYPE_PRINTQ = 1;
STYPE_DEVICE = 2;
STYPE_IPC = 3;
STYPE_DFS = 100;
STYPE_SPECIAL = $80000000;
ACCESS_NONE = 0;
ACCESS_READ = 1;
ACCESS_WRITE = 2;
ACCESS_CREATE = 4;
ACCESS_EXEC = 8;
ACCESS_DELETE = 16;
ACCESS_ATRIB = 32;
ACCESS_PERM = 64;
ACCESS_ALL = (ACCESS_READ + ACCESS_WRITE + ACCESS_CREATE + ACCESS_EXEC + ACCESS_DELETE + ACCESS_ATRIB + ACCESS_PERM);
function UnshareFolder(sName: string): boolean;
procedure ShareFolder(StrName: string);
function getNetName(sFolder: string): string;
implementation
uses
StrUtils;
function NetShareAdd(servername: LPWSTR; level: DWORD; buf: pSHARE_INFO_2; parm_err: LPDWORD): LongWord; stdcall; external 'netapi32.dll';
function NetShareDel(ServerName, ShareName: pwChar; level: DWord): DWord; stdcall; external 'NETAPI32.DLL';
function UnshareFolder(sName: string): boolean;
var
Size: Integer;
rep: LongInt;
NameNT: PWChar;
ret : Boolean;
begin
ret := false;
if DirectoryExists(sName) then
begin
Size := SizeOf(WideChar) * 256;
GetMem(NameNT, Size);
StringToWideChar(getNetName(sName), NameNT, Size);
rep := NetShareDel(nil, NameNT, 0);
if rep = 0 then
ret := True
else
ret := false;
end;
Result := ret;
end;
procedure ShareFolder(StrName: string);
var
buf: Pointer;
UserInf: Share_INFO_2;
err: lpdword;
F: integer;
begin
err := nil;
if DirectoryExists(strName) then
begin
UserInf.shi2_netname := StringToOleStr(getNetName(strName));
UserInf.shi2_type := STYPE_DISKTREE;
UserInf.shi2_remark := '';
UserInf.shi2_permissions := ACCESS_ALL;
//UserInf.shi2_max_uses := -1;
UserInf.shi2_current_uses := 0;
UserInf.shi2_path := StringToOleStr(StrName);
UserInf.shi2_passwd := nil;
GetMem(Buf, sizeof(UserInf));
F := NetSHAREAdd(nil, 2, @UserInf, err);
FreeMem(Buf);
end;
end;
function getNetName(sFolder: string): string;
var
ipos, i: integer;
sTemp: string;
begin
ipos := 0;
for i := 1 to Length(sFolder) do
if sFolder[Length(sFolder)-i] = '\' then
begin
iPos := Length(sFolder)-i;
break;
end;
stemp := AnsiRightStr(sFolder, Length(sFolder) - ipos);
result := sTemp;
end;
end.
و نحوه استفاده هم که بدین شکل :
ShareFolder('C:\temp');
UnshareFolder('C:\temp');
hadisalahi2
یک شنبه 10 شهریور 1392, 19:29 عصر
خسته نباشی عزیزم
این کد رو که خودم دارم و چندین کد مشابه این
شما میشه راهنمایی کنید ، من الان یک پوشه روی یک سیستم یگه رو چطوری Share کنم؟
hadisalahi2
دوشنبه 11 شهریور 1392, 11:06 صبح
خوب حالا میگم
به نظر شما ، یعنی من برای شیر کردن یک فولدر روی سیستم خودم ، این همه این در و اون در میزنم ؟
من میخوام یک فولدر روی یک سیستم دیگه رو شیر کنم
hadisalahi2
سه شنبه 12 شهریور 1392, 10:02 صبح
حتما نمیخواهید برنامه ای هم رو اون سیستم فعال باشه؟
مثلا چه برنامه ای ؟
برنامه ای که خودم نوشتم ، یا یک نرم افزار جانبی؟
میخواهید مستقیم این کارو انجام بدید؟ بدون واسطه؟
منظورتون رو متوجه نمیشم . روش مستقیم چه شکلیه ، غیر مستقیم چه شکلیه؟
بهروز عباسی
سه شنبه 12 شهریور 1392, 10:13 صبح
مثلا چه برنامه ای ؟
برنامه ای که خودم نوشتم ، یا یک نرم افزار جانبی؟
منظورتون رو متوجه نمیشم . روش مستقیم چه شکلیه ، غیر مستقیم چه شکلیه؟
فکر کنم منظورش این بود که شما قصد داری فقط با داشتن یک برنامه یک پوشه رو در سیستم من Share کنی بدون اینکه Agentای چیزی روی سیستم من داشته باشی یا نه ، برنامه شما به دو بخش تقسیم میشه یه بخش میشه Agent که دستور میگیره و اجرا میکنه و یه بخش هم میشه قسمت مدیریتیش که در اختیار شماست ، دراین حالت شما Agent رو روی سیستم من نصب می کنی و با برنامه خودت متصلش میکنی بعد بهش میگی که فلان کارو بکنه !
که اگه حالت دومی باشه مشکل زیادی نخواهید داشت ولی مورد اول کمی داستان داره ،حالا کدوم مدل مد نظر شماست ؟
hadisalahi2
سه شنبه 12 شهریور 1392, 11:55 صبح
به صورت خلاصه و مختصر
یک کامپیوتر سرور دارم که پوشه هایی بر روی اون قرار داره که حاوی فایل و تصاویر هستش که من از طریق برنامه خودم از اونها استفاده میکنم.
حالا من میخوام از روی هر کامپیوتر دیگه ، از داخل برنامه خودم ، پوشه مورد نظر رو share کنم ، فایلها رو بخونم و بعد پوشه رو از حالت Share خارج کنم
حالا به هر طریقی که ممکن باشه.
به نظر خودم رسید که یک برنامه واسط بزارم روی سرور که با تایمر هر چند ثانیه مثلا به یک مقدار جدول بانکم نگاه کنه ، اگه True بود ، پوشه رو Share کنه و اگه False بود از Share خارج کنه
اما راه خوبی نیست و ممکنه در همه موارد خوب کار نکنه ، مخصوصا اینکه برنامه اتوماسیون هستش و ممکنه همزمان چند نفر با یک پوشه کار داشته باشند.
حالا دوستان اگه راه بهتری دارند ، لطفا راهنمایی کنند
ممنون
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.