我想问一下 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
我想问一下 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
一种方法是:
您可以将第二台机器的驱动器映射到运行 4d 数据库的机器。那么这个驱动器的行为就像一个本地驱动器。
例如:我在远程机器上映射了一个名为“D”驱动器的驱动器,它在运行 4D 数据库的机器上变成了“W”驱动器。那么您可以使用此代码
c_Text(vPath)
vPath:="W:\var\www....." //临时路径.....
vDoc:=创建文档(vPath+"notes.txt")
如果(OK=1)
发送数据包(vDoc;“Hello World”)
关闭文件(vDoc)
万一
我知道这是一个老问题,但是我们这里没有太多 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
希望这可以帮助!
是的,尽管没有记录,但该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