源代码:http://down3.tomore.com/down/datanew/2004082821132928529.zip我的操作系统是在C:,Windows XP sp2。程序可以设置系统盘以外的目录为共享,并在其他电脑上可以访问。
但当要共享的目录在系统盘(C:)时,即使用程序设置了共享,在网络邻居里仍无法访问。请问这是什么原因
但当要共享的目录在系统盘(C:)时,即使用程序设置了共享,在网络邻居里仍无法访问。请问这是什么原因
解决方案 »
- Trim的用法
- 谁有dxdbgrid,好像叫DevExQuantumGrid控件下载
- 求高手急救!!!(我是新手)
- 我又有问题了,show,showmodal,有什么区别啊??
- 我在SQL SERVER2000里用企业管理器,将数据库“reg”备份,为何不能用程序恢复?看代码!
- 以下是dephi5.0下的例程,在7.0下不能运行,???
- 急!急!关于文件上传和下载的问题!怎样实现下载一个目录
- 关于ListBox
- :D 各位请问,如何用FORM 在不隐藏任务栏的情况下,最大化时挡住任务栏
- uyuyu
- 用ole流的格式存储到long row字段中,再取出时直接存成文件不能打开
- delphi存在,为什么这么少人用bcb??
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls,My_Share;type
TFormShare = class(TForm)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
EditDir: TEdit;//文件共享目录
EditSharename: TEdit; //共享名称
EditInfo: TEdit;//备注
Button1: TButton;
btn1: TButton;
btn2: TButton;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure btn1Click(Sender: TObject);
procedure btn2Click(Sender: TObject);
private
{ Private declarations }
procedure ssssss;
public
{ Public declarations }
end;var
FormShare: TFormShare;implementationuses
UntSysInfo, UntFileAccessRights;{$R *.DFM}
procedure TFormShare.Button1Click(Sender: TObject);
begin
if EditDir.Text = '' then
begin
Application.MessageBox('请先输入一个目录!', '共享', MB_ICONINFORMATION + MB_OK);
EditDir.SetFocus;
Exit;
end;
if EditSharename.Text = '' then
begin
Application.MessageBox('请先输入共享名称!', '共享', MB_ICONINFORMATION + MB_OK);
EditSharename.SetFocus;
Exit;
end;
ShareResource('',EditDir.Text,EditSharename.Text,EditInfo.Text);
{注意:如果在共享目录名称后面添加 $ 符号,共享后在网络邻居里看不到此文件夹
但实际上已经共享了,你可以在本地看到}
end;
procedure TFormShare.FormCreate(Sender: TObject);
begin
//直接得到的目录后边有“\”号,如果为要目录则保留,否则处理掉。
//同时,设置共享名称为目录名,为要目录则设为驱动器名 editdir.text := ExtractFilePath(ParamStr(0));
if length(editdir.text)>3 then
begin
editdir.text := copy(Editdir.text,1,length(Editdir.text)-1);
editsharename.Text:=editdir.text;
while pos('\',editsharename.Text)<>0 do
editsharename.text := copy (editsharename.text,pos('\',editsharename.text)+1,length(editsharename.text)-pos('\',editsharename.text));
end
else
begin
editsharename.text:=copy(editdir.text,1,1);
end;
end;procedure TFormShare.btn1Click(Sender: TObject);
begin
DeleteShare('',EditSharename.Text);
end;end.================================================unit My_Share;
interfaceuses
Windows,Sysutils ;type
//纪录类型声明,注意参数类型的正确对应,最好别看 delphi 的帮助,引起误导
TSHARE_INFO_502 = record
shi502_netname: PWideChar;
shi502_type: DWORD;
shi502_re: PWideChar;
shi502_permissions: DWORD;
shi502_max_uses: DWORD;
shi502_current_uses: DWORD;
shi502_path: PWideChar;
shi502_passwd: PWideChar;
shi502_reserved: DWORD;
shi502_security_descriptor: PSECURITY_DESCRIPTOR;
end;//添加共享
function NetShareAdd(servername:Widestring; level: DWORD; Buf: PBYTE;
var parm_err: PDWORD ): DWORD; stdcall;
//删除共享
function NetShareDel(ServerName:Widestring; NetName: Widestring;
Reserved: DWord): Integer; stdcall;
const
{共享类型}
STYPE_DISKTREE = 0 ;
STYPE_PRINTQ = 1 ;
STYPE_DEVICE = 2 ;
STYPE_IPC = 3 ;
{访问权限}
ACCESS_READ = 0 ;
ACCESS_WRITE = 1 ;
ACCESS_CREATE = 2 ;
ACCESS_EXEC = 3 ;
ACCESS_DELETE = 4 ;
ACCESS_ALL = 7 ;function ShareResource(ServerName,FilePath,NetName, Re : string): Integer;
function DeleteShare(ServerName: string; NetName: string): Integer;implementation//注意在 windows95/98/me 下面 dll 库是 SVRAPI.DLL ,而且参数类型也要随之改变的吆!
function NetShareAdd; external 'netapi32.DLL' name 'NetShareAdd';
function NetShareDel; external 'netapi32.DLL' name 'NetShareDel';function ShareResource(ServerName,FilePath,NetName, Re : string): Integer;
var
ShInfo: TSHARE_INFO_502;
parm_err:PDWORD;
_FilePath,_NetName, _Re : PWideChar ;
_ServerName : Pchar ;
begin
GetMem(_ServerName,255) ; //分配内存
GetMem(_FilePath,255);
GetMem(_NetName,255);
GetMem(_Re,255);
StringToWideChar(FilePath,_FilePath,255); //字符串转换,一定要转换正确
StringToWideChar(NetName,_NetName,255);
StringToWideChar(Re,_Re,255);
strpcopy(_ServerName,ServerName); //开始创建结构
with ShInfo do
begin
shi502_netname := _NetName;
shi502_type := STYPE_DISKTREE ;
shi502_re := _Re ;
shi502_max_uses := $FFFFFFFF;
shi502_current_uses := 10;
shi502_path := _FilePath;
shi502_passwd := nil;
shi502_reserved := 0;
shi502_security_descriptor := nil;
shi502_permissions := ACCESS_ALL;
end; try
Result := NetShareAdd(_ServerName, 502, @ShInfo, parm_err);
finally // 别忘了释放内存
FreeMem(_ServerName,255);
FreeMem(_FilePath,255);
FreeMem(_NetName,255);
FreeMem(_Re,255);
end;
end;function DeleteShare(ServerName: string; NetName: string): Integer;
begin
NetShareDel(ServerName,NetName,0);
end;end.