我编写了这个程序,使用ftpput api在服务器上上传文件但是它运行不正常,但文件没有被删除!
这是代码:
unit ftp3;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls,wininet;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var hInet, hConnect: HINTERNET;
local_file,
remote_file,
user,remote_server,
pass: pchar;
begin
local_file := 'C:\Documents and Settings\Omair\Desktop\loggen.txt';
remote_file := 'loggen.txt';
user := 'my user';
pass := 'my pass';
remote_server := ' ftp.drivehq.com';
hInet := InternetOpen(0, INTERNET_OPEN_TYPE_PRECONFIG, 0, 0, 0);
hConnect := InternetConnect(hInet,
remote_server,
INTERNET_DEFAULT_FTP_PORT,
user, pass,
INTERNET_SERVICE_FTP,
INTERNET_FLAG_PASSIVE,
0);
ftpPutFile(hConnect, local_file, remote_file, FTP_TRANSFER_TYPE_BINARY, 0);
InternetCloseHandle(hInet);
InternetCloseHandle(hConnect);
end;
end.
答案 0 :(得分:4)
检查FtpPutFile
的返回值(成功时应返回TRUE
),并在GetLastError
时收到详细错误。
答案 1 :(得分:4)
为什么不尝试通过测试所有返回代码来确定发生了什么,以确定它失败的位置?
procedure TForm1.Button1Click(Sender: TObject);
var
hInet, hConnect: HINTERNET;
local_file, remote_file, user,remote_server, pass: PChar;
begin
local_file := 'C:\Documents and Settings\Omair\Desktop\loggen.txt';
remote_file := 'loggen.txt';
user := 'my user';
pass := 'my pass';
remote_server := ' ftp.drivehq.com';
hInet := InternetOpen(0, INTERNET_OPEN_TYPE_PRECONFIG, 0, 0, 0);
if hInet = nil then
RaiseLastOSError;
hConnect := InternetConnect(hInet,
remote_server,
INTERNET_DEFAULT_FTP_PORT,
user, pass,
INTERNET_SERVICE_FTP,
INTERNET_FLAG_PASSIVE,
0);
if hConnect = nil then
RaiseLastOSError;
if not ftpPutFile(hConnect, local_file, remote_file, FTP_TRANSFER_TYPE_BINARY, 0) then
RaiseLastOSError;
if not InternetCloseHandle(hConnect) then
RaiseLastOSError;
if not InternetCloseHandle(hInet) then
RaiseLastOSError;
end;
在尝试发送文件之前,你甚至没有知道你是否有连接 ...(正如预期的那样,当我使用这些网站/用户/密码运行代码时,我得到的是价值观)
如果你过去了,你可能会得到一个详细解释为什么ftpPutFile失败,就像在这个例子中一样:
System Error. Code: 3.
The system cannot find the path specified.
答案 2 :(得分:2)
首先,通过检查您是否可以使用Microsoft的内置FTP程序FTP相同的文件来排除程序中的任何重大错误(或者如果您愿意,可以将它们置于规则中)。
从命令行输入
FTP ftp.drivehq.com (return)
如果这不是通过登录提示返回给您的,那么您在Delphi代码之外就会遇到问题。要么您的互联网连接有限(可能是端口25,FTP端口,被防火墙/路由器阻止),或者FTP地址本身存在问题。
如果您收到提示,请在询问时输入您的用户名和密码。现在输入
BIN (return) PUT 'C:\Documents and Settings\Omair\Desktop\loggen.txt' (return)
如果它似乎发送你的文件,(顺便说一下,键入BYE离开FTP程序)那么你的问题是你的Delphi代码而不是FTP进程本身(这里的其他答案有助于指出你的事情)需要检查Delphi代码本身)。如果它似乎没有发送文件,我再建议你在修改Delphi代码之前解决这个问题。
当我在做任何类似的“在线”工作时,我总是试图获得一个单独的过程来测试系统的“另一端”,一个不使用我自己的代码的过程。