我正在尝试使用.net在Genexus 10 V3上使用GxFtpPut将文件保存在Iseries数据库中的库中,但是在发送文件时Genexus尝试将其发送到Windows目录,而不是将其发送到有效的库在cmd上使用ftp命令
我已经尝试过更改路由无效,并试图找到另一种通过Genexus发送文件的方式。
例如,当使用cmd时,我只是这样:
put C:\FILES\Filename.txt Library/Filename
它可以在库中发送文件
但是在Genexus上执行此操作时
Call("GxFtpPut", &FileDirectory , 'Library/'+&FileName,'B' )
不起作用,并尝试在服务器的Windows文件中找到具有该名称的目录
我只希望能够毫无问题地将其发送到服务器库。
答案 0 :(得分:1)
IBM i有两种不同的名称格式,具体取决于您要使用的文件系统。 NAMEFMT 0是library/filename
格式,PC FTP客户端可能不知道。 NAMEFMT 1是非IBM i计算机使用的典型分层目录路径,如果要将文件放在IFS(集成文件系统)中的任何位置,它也可以与IBM i一起使用。
有趣的是,本机库文件系统也可以从IFS访问。但是要解决这个问题,您需要使用一种可能有点陌生的格式。 /QSYS.lib/library.lib/filename.file/membername.mbr
您可以删除成员名称。
要更改名称格式,可以在远程主机上发出SITE子命令,如下所示:
QUOTE SITE NAMEFMT 0 -- This sets name format 0 (library/filename)
QUITE SITE NAMEFMT 1 -- This sets name format 1 (directory path)
我使用普通的Windows FTP客户端进行了一些测试。 PC上的测试文件是在Notepad ++中创建的文本文件。原来,除非更改,否则我们从NAMEFMT 0开始。看起来Genexus仅支持有限的命令集。因此,以下是可以使用的受限FTP脚本:
ascii
put test.txt mylib/testpf
我现在可以在绿屏实用程序上拉起testpf
并进行阅读。我还可以在GUI SQL客户端中阅读testpf
。 ASCII文本已正确转换为EBCDIC。
|TESTPF | |--------------------------------------------------------------------------------| | | |// ------------------------------------ | |// Sweep | |// | |// Performs the sweep logic | |// ------------------------------------ | |dcl-proc Sweep; | | | | | | exec sql | | update atty a | | set ymglsb = (select ymglsb from glaty | | where atty = a.atty) | | where atty in (select atty from glaty where atty = a.atty); | |// where ymglsb in (select ymglsb from glaty where atty = a.atty); | | if %subst(sqlstate: 1: 2) < '00' or | | %subst(sqlstate: 1: 2) > '02'; | | exec sql get diagnostics condition 1 | | :message = message_text; | | SendSqlMsg('02: ' + message); | | endif; | | | | exec sql | | update atty a | | set ymglsb = '000' | | where not exists (select * from glaty where atty = a.atty); | | if %subst(sqlstate: 1: 2) < '00' or | | %subst(sqlstate: 1: 2) > '02'; | | exec sql get diagnostics condition 1 | | :message = message_text; | | SendSqlMsg('03: ' + message); | | endif; | | | |end-proc; |
但是,如果我尝试以二进制模式进行传输,则文件中的结果数据如下所示:
|TESTPF | |--------------------------------------------------------------------------------| |ëÏÁÁø&ÁÊÃ?Ê_ËÈÇÁËÏÁÁø% | |?ÅÑÄÀÄ%øÊ?ÄëÏÁÁøÁÌÁÄËÉ% | |ÍøÀ/ÈÁ/ÈÈ`/ËÁÈ`_Å%ËÂËÁ%ÁÄÈ`_Å%ËÂÃÊ?_Å%/È` | |ÏÇÁÊÁ/ÈÈ`//ÈÈ`ÏÇÁÊÁ/ÈÈ`Ñ>ËÁ%ÁÄÈ/ÈÈ`ÃÊ?_Å%/È`ÏÇÁÊÁ/ÈÈ | |`//ÈÈ`ÏÇÁÊÁ`_Å%ËÂÑ>ËÁ%ÁÄÈ`_Å%ËÂÃÊ?_Å%/È`ÏÇÁÊÁ/ÈÈ`//ÈÈ | |`ÑöËÍÂËÈËÉ%ËÈ/ÈÁ?ʶËÍÂËÈËÉ%ËÈ/ÈÁ | |ÁÌÁÄËÉ%ÅÁÈÀÑ/Å>?ËÈÑÄËÄ?>ÀÑÈÑ?>_ÁËË/ÅÁ_ÁËË/ÅÁ¬ÈÁÌÈ | |ëÁ>ÀëÉ%(ËÅ_ÁËË/ÅÁÁ>ÀÑÃÁÌÁÄËÉ%ÍøÀ/ÈÁ/ÈÈ`/ | |ËÁÈ`_Å%ËÂÏÇÁÊÁ>?ÈÁÌÑËÈËËÁ%ÁÄÈÃÊ?_Å%/È`ÏÇÁÊÁ/ÈÈ`// | |ÈÈ`ÑöËÍÂËÈËÉ%ËÈ/ÈÁ?ʶËÍÂËÈËÉ%ËÈ/ÈÁ | |ÁÌÁÄËÉ%ÅÁÈÀÑ/Å>?ËÈÑÄËÄ?>ÀÑÈÑ?>_ÁËË/ÅÁ_ÁËË/ÅÁ¬ÈÁÌÈ | |ëÁ>ÀëÉ%(ËÅ_ÁËË/ÅÁÁ>ÀÑÃÁ>ÀøÊ?Ä |
这尚未转换,因为我们已告知IBM i FTP服务器不要将其转换为EBCDIC,因为它是二进制的。
因此,请尝试使用ASCII模式,使用库/文件名格式。目标文件不需要预先存在。