Savetofile出错的问题(100分)

  • 主题发起人 主题发起人 bear87
  • 开始时间 开始时间
B

bear87

Unregistered / Unconfirmed
GUEST, unregistred user!
先简单的说一下我写的程序:
Var list:tstringlist;
list:=tstringlist.create;
……
list.savetofile("d:/办肥自动化/A.TXT")

调试时到最后一句过不去,报错为“cannot create file "d:/办公自动化/A.TXT"
这是个备份数据的程序,通过网络将服务器里的数据库备份到服务器里,连接应该没有问题,调试时数据库打开也通过了。路径应该也没有问题,但是为什么不能创建文件呢?
哪位大侠能告诉我,把我一半的财产分给他,先谢谢了!
 
看看有没有“d:/办公自动化”这个文件夹或者是否有权限读写此文件夹
 
你把网络路径当作本地路径来用,怎么可能!
 
//UNC/XXX/XX.TXT
 
写成://d:/办肥自动化/A.TXT 试试
 
list.savetofile("d:/办肥自动化/A.TXT")
这句不会检测文件夹是否存在,所以你要先判断一下,不存在就自己创建.
还有一个可能就是,这个文件夹你没有写入的权限...
 
list.savetofile(), 一般是用来保存到本地文件的, 创建文件需要你自己代码创建本地文件, 然后再操作
 
onlyonekgx,
果然是这样只能写到自己的电脑上,要是我想写到服务器上应该怎么做呢?
 
首先确定你用什么方式访问服务器,如果是局域网可以用共享文件夹,如果是公网上,可以考虑FTP.....

如果是用共享文件夹方式,你首先要保证自己的机器能够访问服务器的文件夹,然后要保证文件夹有写权限

访问要先登陆建立连接的,一般就是先用本机访问下对方机器,或者在程序里用CreateProcess调用命令行的net use命令
 
hs-kill,
我用的是局域,我将 savetofile()的参数设为了自己电脑里的文件,能成功的将服务器的数据备份到自己的电脑里,这样是不是表示已经建立连接了?
要是没有,怎么样才能建立呢?可不可以说得详细些?
另,访问服务器是需要权限的。
 
savetofile存本地当然不是建立连接

比如你访问服务器需要地址//server 用户名test 密码111
一般用windows访问,需要输入//server 然后系统会跳出需要输入用户名和密码的对话框,你正确输入了用户名和密码后才可以访问服务器的共享目录
在输入一遍以后,以后再用//server 访问就不需要输入用户名和密码了,这样就表明已经建立了连接

而如果用软件直接访问,可以使用命令行命令 net use ,格式如下:
NET USE
[devicename | *] [//computername/sharename[/volume] [password | *]]
[/USER:[domainname/]username]
[/USER:[dotted domain name/]username]
[/USER:[username@dotted domain name]
[/SMARTCARD]
[/SAVECRED]
[[/DELETE] | [/PERSISTENT:{YES | NO}]]

NET USE {devicename | *} [password | *] /HOME

NET USE [/PERSISTENT:{YES | NO}]

也就是说,你可以先执行命令 net use //server /user:test 1111 来建立连接,这样你就可以直接访问了
结束连接使用net use //server /delete
 
hs-kill
能给出用DELPHI实现的详细程序吗?
我试了一下,DELPHI不识别NET USE呀?
还是我理解错了,不是在DELPHI里用NET USE
 
.... net use 是windows的命令.....在cmd里执行的.....delphi代码如下:

procedure UseShare(ShareName, User, Pwd:string);
var
str:string;
stinfo:TStartUpInfo;
proinfo:TProcessInformation;
proresult:boolean;
begin
str:='net use "'+ShareName+'"';
if not SameText(User,'') then
str:=str+'net use "'+ShareName+'"'+' /user:'+User+' '+Pwd;

FillChar(stinfo, sizeof(TStartupInfo), 0);
proresult:=CreateProcess(nil,pchar(str),nil,nil,false,
DETACHED_PROCESS or CREATE_NO_WINDOW,nil,nil,stinfo,proinfo);
if proresult then
WaitForSingleObject(proinfo.hProcess,INFINITE);
end;
 
没有用户名和密码,还不能试验行不行,不过知道怎么做了,谢啦!
 
后退
顶部