如何在另外一台机的共享文件中读写/创建文本(访问时要用到用户名和密码验证的) ( 积分: 100 )

  • 主题发起人 主题发起人 菜鸟黄
  • 开始时间 开始时间

菜鸟黄

Unregistered / Unconfirmed
GUEST, unregistred user!
如何在另外一台机的共享文件中读写/创建文本(访问时要用到用户名和密码验证的)
 
先执行一个登录的语句:<br>&nbsp;&nbsp;WinExec(PChar('net&nbsp;use&nbsp;//主机名/ipc$&nbsp;/user:用户名&nbsp;密码'),&nbsp;SW_HIDE)<br>只要权限足够,就可以象本地目录一下操作了。<br>tmpFileStream&nbsp;:=&nbsp;TFileStream.Create('//192.168.0.1/123/abc.txt',&nbsp;fmCreate&nbsp;or&nbsp;fmOpenReadWrite);
 
用WinExec是异步操作。<br>最好用CreateProcess,可以确保共享文件夹已经是打开的,
 
to&nbsp;stargazer<br>可以写出代码吗!
 
比起WinExec要稍微复杂一些。
 
to&nbsp;nicai_wgl<br>好像不行,可以写完整一点吗!
 
收集的资料<br>WNetAddConnection('//192.168.0.60/chan','','192.168.0.20');<br>&nbsp;copyfile(PChar(filepath+'chan/'+sendfile),PChar('//192.168.0.60/chan/'+sendfile),false);<br>&nbsp;label1.Caption:='与监控端连接成功!';<br>&nbsp;button1.Caption:='关闭';<br><br><br>var&nbsp;NRW:&nbsp;TNetResource;<br>begin<br>&nbsp;&nbsp;&nbsp;with&nbsp;NRW&nbsp;do<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dwType:=&nbsp;RESOURCETYPE_ANY;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lpLocalName:=PChar(LocalDriver);&nbsp;//映射的网络驱动器,取自己最高盘符后面一个就可以了。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lpRemoteName:=PChar(ShareName);&nbsp;//共享文件夹名,例如&nbsp;//hello/Share<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lpProvider:='';<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;result&nbsp;:=&nbsp;WNetAddConnection2(NRW,&nbsp;PChar(Password),&nbsp;PChar(UserName),&nbsp;CONNECT_UPDATE_PROFILE);<br>end;&nbsp;<br><br><br>我现在通过WinExec('net&nbsp;use&nbsp;//server/$dir$&nbsp;password',0)&nbsp;基本上将问题解决了!!<br>谢谢大家帮忙!!<br><br>查一查NetUserAdd等相关API吧.<br>WNetAddConnection&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;重定向本地设备网络资源&nbsp;<br>WNetAddConnection2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;重定向本地设备网络资源&nbsp;<br>WNetCancelConnection&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;断开网络连接<br>WNetCancelConnection2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;断开网络连接<br>WNetCloseEnum&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;结束网络资源列表<br>WNetConnectionDialog&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;开始网络连接对话框<br>WNetDisconnectDialog&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;断开网络对话框<br>WNetEnumResource&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;继续列表网络资源<br>WNetGetConnection&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;获取网络资源名<br>WNetGetLastError&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;返回网络函数最近错误<br>WNetGetUniversalName<br>WNetGetUser&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;获取当前网络用户名<br>WNetOpenEnum&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;列出网络资源<br><br><br>WinExec(<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PChar(Format('net&nbsp;use//%s/ipc$&nbsp;&quot;%s&quot;&nbsp;/user:&nbsp;&quot;%s&quot;&nbsp;',<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[Edtserver.Text,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EdtPassword.Text,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EdtUserName.Text])),<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;);<br><br>可是我通过WNetAddConnection(pchar(path),'password','z:')<br>登陆网络后,该客户端需要有权限访问该文件夹,<br>所以即使加上$,在该客户的资源管理器中也可以访问这个文件夹!!<br><br>建立映射网络驱动器<br><br>procedure&nbsp;TForm1.Button1Click(Sender:&nbsp;Tobject);<br><br>var&nbsp;NetR&nbsp;:NETRESOURCE;ErrInfo&nbsp;:&nbsp;Longint;<br><br>begin<br><br>NetR.dwScope&nbsp;:=&nbsp;RESOURCE_GLOBALNET;<br><br>NetR.dwType&nbsp;:=&nbsp;RESOURCETYPE_DISK;<br><br>NetR.dwDisplayType&nbsp;:=&nbsp;RESOURCEDISPLAYTYPE_SHARE;<br><br>NetR.dwUsage&nbsp;:=&nbsp;RESOURCEUSAGE_CONNECTABLE;<br><br>NetR.lpLocalName&nbsp;:=&nbsp;'j:';<br><br>NetR.lpRemoteName&nbsp;:=&nbsp;'//Lifang/c';<br><br>ErrInfo&nbsp;:=&nbsp;WNetAddConnection2(NetR,&nbsp;'',&nbsp;'',&nbsp;CONNECT_UPDATE_PROFILE);<br><br>If&nbsp;ErrInfo&nbsp;=&nbsp;NO_ERROR&nbsp;Then<br><br>messagebox(0,'Net&nbsp;connection&nbsp;successful!','',0)<br><br>Else<br><br>messagebox(0,'ERROR:&nbsp;','',0);<br><br>end;<br><br>断开映射网络驱动器<br><br>procedure&nbsp;TForm1.Button2Click(Sender:&nbsp;Tobject);<br><br>var&nbsp;ErrInfo&nbsp;:&nbsp;Longint;<br><br>strLocalName&nbsp;:&nbsp;pchar;<br><br>begin<br><br>strLocalName:='j:';<br><br>ErrInfo&nbsp;:=&nbsp;WNetCancelConnection2(strLocalName,&nbsp;CONNECT_UPDATE_PROFILE,&nbsp;False);<br><br>If&nbsp;ErrInfo&nbsp;=&nbsp;NO_ERROR&nbsp;Then<br><br>messagebox(0,'Net&nbsp;disconnection&nbsp;successful!','',0)<br><br>Else<br><br>messagebox(0,'ERROR','',0);<br><br>end;
 
先定一个函数:<br>function&nbsp;SynchroExecute(const&nbsp;AExecutedFileName:string;<br>&nbsp;&nbsp;const&nbsp;ACmdLine:string;<br>&nbsp;&nbsp;const&nbsp;AWaitTime:Integer&nbsp;=&nbsp;-1;const&nbsp;AIsShow:Boolean&nbsp;=&nbsp;True):Boolean;<br>var<br>&nbsp;&nbsp;stinfo:TStartupInfo;<br>&nbsp;&nbsp;psinfo:TProcessInformation;<br>&nbsp;&nbsp;sap,sat:TSecurityAttributes;<br>begin<br>&nbsp;&nbsp;Result:=False;<br>&nbsp;&nbsp;stinfo.dwFlags:=STARTF_USESHOWWINDOW;<br>&nbsp;&nbsp;stinfo.cbReserved2:=0;<br>&nbsp;&nbsp;stinfo.lpReserved:=nil;<br>&nbsp;&nbsp;stinfo.lpReserved2:=nil;<br>&nbsp;&nbsp;stinfo.lpDesktop:=nil;<br>&nbsp;&nbsp;if&nbsp;not&nbsp;AIsShow&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;stinfo.wShowWindow:=SW_HIDE<br>&nbsp;&nbsp;else<br>&nbsp;&nbsp;&nbsp;&nbsp;stinfo.wShowWindow:=SW_SHOWNORMAL;<br>&nbsp;&nbsp;stinfo.cb:=SizeOf(TStartupInfo);<br><br>&nbsp;&nbsp;sap.lpSecurityDescriptor:=nil;<br>&nbsp;&nbsp;sap.bInheritHandle:=True;<br>&nbsp;&nbsp;sap.nLength:=SizeOf(TSecurityAttributes);<br>&nbsp;&nbsp;sat.lpSecurityDescriptor:=nil;<br>&nbsp;&nbsp;sat.bInheritHandle:=False;<br>&nbsp;&nbsp;sat.nLength:=SizeOf(TSecurityAttributes);<br><br>&nbsp;&nbsp;if&nbsp;&nbsp;FileExists(AExecutedFileName)&nbsp;and<br>&nbsp;&nbsp;&nbsp;&nbsp;CreateProcess(PChar(AExecutedFileName),PChar(ACmdLine),@sap,@sat,False,NORMAL_PRIORITY_CLASS,nil,PChar(ExtractFilePath(ExpandFileName(AExecutedFileName))),stinfo,psinfo)&nbsp;then<br>&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;CloseHandle(psinfo.hThread);<br>&nbsp;&nbsp;&nbsp;&nbsp;Result:=WaitForSingleObject(psinfo.hProcess,AWaitTime)&nbsp;=&nbsp;WAIT_OBJECT_0;<br>&nbsp;&nbsp;&nbsp;&nbsp;CloseHandle(psinfo.hProcess);<br>&nbsp;&nbsp;end<br>&nbsp;&nbsp;else&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;RaiseLastOSError;<br>&nbsp;&nbsp;end;<br>end;<br><br>然后调用之:<br>var<br>&nbsp;&nbsp;SystemPath:PChar;<br>begin<br>&nbsp;&nbsp;GetMem(SystemPath,MAX_PATH+1);<br>&nbsp;&nbsp;try<br>&nbsp;&nbsp;&nbsp;&nbsp;FillChar(SystemPath^,MAX_PATH+1,0);<br>&nbsp;&nbsp;&nbsp;&nbsp;GetSystemDirectory(SystemPath,MAX_PATH);<br>&nbsp;&nbsp;&nbsp;&nbsp;SynchroExecute(SystemPath+'/net.exe','&nbsp;use&nbsp;//主机名/IPC$&nbsp;PWD&nbsp;/USER:USERNANE',-1,False);<br>&nbsp;&nbsp;finally<br>&nbsp;&nbsp;&nbsp;&nbsp;FreeMem(SystemPath,MAX_PATH+1);<br>&nbsp;&nbsp;end;<br>end;<br>其中USERNAME&nbsp;和&nbsp;PWD分别用该计算机上有效的用户名和口令代替。
 
晕~贴这么多出来,要解决问题吖,大哥
 
赫赫,我贴的就是我正在用的代码,绝对可以。
 
SynchroExecute(SystemPath+'/net.exe','&nbsp;use&nbsp;//主机名/IPC$&nbsp;PWD&nbsp;/USER:USERNANE',-1,False);<br>这一句解释一下
 
其中USERNAME&nbsp;和&nbsp;PWD分别用在该计算机上有效的用户名和口令替换。
 
先执行一个登录的语句:<br>&nbsp;&nbsp;WinExec(PChar('net&nbsp;use&nbsp;//主机名/ipc$&nbsp;/user:用户名&nbsp;密码'),&nbsp;SW_HIDE)<br>只要权限足够,就可以象本地目录一下操作了。<br>tmpFileStream&nbsp;:=&nbsp;TFileStream.Create('//192.168.0.1/123/abc.txt',&nbsp;fmCreate&nbsp;or&nbsp;fmOpenReadWrite);<br><br>主机名~是要创建文件的计算机名,还是被监听的计算机名
 
是你要在它的共享文件夹里面创建文件的计算机名
 
是要进行文件操作的另一台计算机。&nbsp;用户名和密码&nbsp;也是那台计算机上的。
 
http://www.delphibbs.com/delphibbs/dispq.asp?lid=3675831
 
//映射网络驱动器:将&nbsp;//192.168.0.1/Share&nbsp;映射为&nbsp;X:<br>procedure&nbsp;TForm1.Button1Click(Sender:&nbsp;TObject);<br>var&nbsp;<br>&nbsp;&nbsp;NRW:&nbsp;TNetResource;&nbsp;<br>begin<br>&nbsp;&nbsp;with&nbsp;NRW&nbsp;do&nbsp;<br>&nbsp;&nbsp;begin&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;dwType&nbsp;:=&nbsp;RESOURCETYPE_ANY;<br>&nbsp;&nbsp;&nbsp;&nbsp;lpLocalName&nbsp;:=&nbsp;pChar(Edit2.Text);&nbsp;&nbsp;//&nbsp;'X:'&nbsp;map&nbsp;to&nbsp;this&nbsp;driver&nbsp;letter<br>&nbsp;&nbsp;&nbsp;&nbsp;lpRemoteName&nbsp;:=&nbsp;pChar(Edit1.Text);&nbsp;//&nbsp;'//192.168.0.1/Share'<br>&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Must&nbsp;be&nbsp;filled&nbsp;in.&nbsp;If&nbsp;an&nbsp;empty&nbsp;string&nbsp;is&nbsp;used,&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;it&nbsp;will&nbsp;use&nbsp;the&nbsp;lpRemoteName.<br>&nbsp;&nbsp;&nbsp;&nbsp;lpProvider&nbsp;:=&nbsp;'';&nbsp;<br>&nbsp;&nbsp;end;<br>&nbsp;&nbsp;WNetCancelConnection2(pChar(Edit2.Text),&nbsp;CONNECT_UPDATE_PROFILE,&nbsp;True);&nbsp;<br><br>&nbsp;&nbsp;WNetAddConnection2(NRW,&nbsp;'用户名',&nbsp;'密码',&nbsp;CONNECT_UPDATE_PROFILE);<br>end;
 
后退
顶部