3

我想问一下 4D 是否可以在网络目录上创建文档。例如:

vIP:="\\100.100.100.100" // this is a hypothetical IP
vPath:=vIP+"\storage\"
vDoc:=Create document(vPath+"notes.txt")
If(OK=1)
    SEND PACKET(vDoc;"Hello World")
    CLOSE DOCUMENT(vDoc)
End if
4

3 回答 3

0

一种方法是:

您可以将第二台机器的驱动器映射到运行 4d 数据库的机器。那么这个驱动器的行为就像一个本地驱动器。

例如:我在远程机器上映射了一个名为“D”驱动器的驱动器,它在运行 4D 数据库的机器上变成了“W”驱动器。那么您可以使用此代码

c_Text(vPath)

vPath:="W:\var\www....." //临时路径.....

vDoc:=创建文档(vPath+"notes.txt")

如果(OK=1)

发送数据包(vDoc;“Hello World”)

关闭文件(vDoc)

万一

于 2015-01-08T15:48:34.977 回答
0

我知道这是一个老问题,但是我们这里没有太多 4D 编码器,所以我会为后代回答这个问题!

是的,您可以像这样在网络共享上创建文档,前提是您拥有相应的权限

在这种情况下,我认为您只需要注意如何逃脱路径即可。确保将反斜杠加倍,使代码块看起来像这样(注意 IP 地址和文件夹名称周围的额外反斜杠):

vIP:="\\\\100.100.100.100"  // this is a hypothetical IP
vPath:=vIP+"\\storage\\"
vDoc:=Create document(vPath+"notes.txt")
If (OK=1)
  SEND PACKET(vDoc;"Hello World")
  CLOSE DOCUMENT(vDoc)
End if 

希望这可以帮助!

于 2015-07-01T20:00:19.233 回答
0

是的,尽管没有记录,但该CREATE DOCUMENT命令确实适用于有效的UNC 路径,前提是您有足够的权限在给定的路径上创建文档。

但是,您的示例代码存在问题。您的问题归结为您对反斜杠\字符的使用。

反斜杠\字符用于4D 中的转义序列,因此用于转义许多其他字符,因此它本身也必须进行转义。只需将示例代码中的所有反斜杠从\to加倍即可\\解决问题。

您的示例代码:

vIP:="\\100.100.100.100" // this is a hypothetical IP
vPath:=vIP+"\storage\"
vDoc:=Create document(vPath+"notes.txt")
If(OK=1)
    SEND PACKET(vDoc;"Hello World")
    CLOSE DOCUMENT(vDoc)
End if

应该这样写:

vIP:="\\\\100.100.100.100" // this is a hypothetical IP
vPath:=vIP+"\\storage\\"
vDoc:=Create document(vPath+"notes.txt")
If(OK=1)
    SEND PACKET(vDoc;"Hello World")
    CLOSE DOCUMENT(vDoc)    
End if

您的代码可以通过使用Test Path Name确认路径有效并且文件不存在来进一步改进。然后,如果它确实存在,您甚至可以使用Open Document并附Set Document Position加到文档中,如下所示:

vIP:="\\\\100.100.100.100"
vPath:=vIP+"\\storage\\"
vDocPath:=vPath+"notes.txt"
If (Test path name(vPath)=Is a folder)
  // is a valid path
  If (Not(Test path name(vDocPath)=Is a document))
    // document does not exist
    vDoc:=Create document(vDocPath)
    If (OK=1)
      SEND PACKET(vDoc;"Hello World")
      CLOSE DOCUMENT(vDoc)
    End if 
  Else 
    // file already exists at location!
    vDoc:=Open document(vDocPath)
    If (OK=1)
      SET DOCUMENT POSITION(vDoc;0;2)  // position 0 bytes from EOF
      SEND PACKET(vDoc;"\rHello Again World") // new line prior to Hello
      CLOSE DOCUMENT(vDoc)
    End if 
  End if 
Else 
  // path is not valid!
  ALERT(vPath+" is invalid")
End if 
于 2016-02-25T01:36:38.427 回答