Directory 进度-验证用户输入文件输出路径
我编写了一些进度代码,将一些数据输出到用户定义的文件中。数据本身并不重要,输出过程工作正常。基本上是 定义变量文件路径。 以类似C:\UserAccount\New.txt的格式更新filePath/*用户类型*/ 输出到(值)文件路径 这很好,在输入目录中创建了一个txt文件。我的问题是: progress是否具有允许我检查输入是否正确的功能 文件路径有效吗?(特别是,如果用户输入了有效目录,并且他们有权在所选目录中创建文件)Directory 进度-验证用户输入文件输出路径,directory,progress-4gl,openedge,file-exists,4gl,Directory,Progress 4gl,Openedge,File Exists,4gl,我编写了一些进度代码,将一些数据输出到用户定义的文件中。数据本身并不重要,输出过程工作正常。基本上是 定义变量文件路径。 以类似C:\UserAccount\New.txt的格式更新filePath/*用户类型*/ 输出到(值)文件路径 这很好,在输入目录中创建了一个txt文件。我的问题是: progress是否具有允许我检查输入是否正确的功能 文件路径有效吗?(特别是,如果用户输入了有效目录,并且他们有权在所选目录中创建文件) 如有任何意见或反馈,我们将不胜感激。FILE-INFO 使用系统句
如有任何意见或反馈,我们将不胜感激。FILE-INFO 使用系统句柄FILE-INFO可以为您提供大量信息。它也适用于目录
FILE-INFO:FILE-NAME = "c:\temp\test.p".
DISPLAY
FILE-INFO:FILE-NAME
FILE-INFO:FILE-CREATE-DATE
FILE-INFO:FILE-MOD-DATE
FILE-INFO:FILE-INFO
FILE-INFO:FILE-MOD-TIME
FILE-INFO:FILE-SIZE
FILE-NAME:FILE-TYPE
FILE-INFO:FULL-PATHNAME
WITH FRAME f1 1 COLUMN SIDE-LABELS.
对具有写入权限的现有目录的简单检查可能如下所示:
FUNCTION dirOK RETURNS LOGICAL (INPUT pcDir AS CHARACTER):
FILE-INFO:FILE-NAME = pcDir.
IF INDEX(FILE-INFO:FILE-TYPE, "D") > 0
AND INDEX(FILE-INFO:FILE-TYPE, "W") > 0 THEN
RETURN TRUE.
ELSE
RETURN FALSE.
END FUNCTION.
FILE-NAME:FILE-TYPE以D开头表示目录,以F开头表示普通文件。它还包括有关阅读和写作权利的信息。查看帮助以了解更多信息。如果文件不存在,则除文件名之外的所有属性基本上都将为空或未知(?)
编辑:在某些情况下,即使该目录中没有实际的写入权限,FILE-TYPE似乎也会返回W,因此您可能需要通过错误处理来处理此问题
错误处理
OUTPUT TO VALUE("f:\personal\test.txt").
PUT UNFORMATTED "Test" SKIP.
OUTPUT CLOSE.
CATCH eAnyError AS Progress.Lang.ERROR:
/* Here you could check for specifically error no 98 indicating a problem opening the file */
MESSAGE
"Error message and number retrieved from error object..."
eAnyError:GetMessage(1)
eAnyError:GetMessageNum(1) VIEW-AS ALERT-BOX BUTTONS OK.
END CATCH.
FINALLY:
END FINALLY.
搜索
检查单个文件时,“搜索”命令将起作用。如果文件存在,则返回完整路径。但是,它对目录不起作用,只对文件起作用。如果搜索时没有完整路径,例如SEARCH(“test.p”)
命令将搜索PROPATH环境变量中设置的目录,并返回第一个匹配的完整路径条目。如果不匹配,它将返回未知值(?)
语法:
IF SEARCH("c:\temp\test.p") = ? THEN
MESSAGE "No such file" VIEW-AS ALERT-BOX ERROR.
ELSE
MESSAGE "OK" VIEW-AS ALERT-BOX INFORMATION.
文件信息 使用系统句柄FILE-INFO可以为您提供大量信息。它也适用于目录
FILE-INFO:FILE-NAME = "c:\temp\test.p".
DISPLAY
FILE-INFO:FILE-NAME
FILE-INFO:FILE-CREATE-DATE
FILE-INFO:FILE-MOD-DATE
FILE-INFO:FILE-INFO
FILE-INFO:FILE-MOD-TIME
FILE-INFO:FILE-SIZE
FILE-NAME:FILE-TYPE
FILE-INFO:FULL-PATHNAME
WITH FRAME f1 1 COLUMN SIDE-LABELS.
对具有写入权限的现有目录的简单检查可能如下所示:
FUNCTION dirOK RETURNS LOGICAL (INPUT pcDir AS CHARACTER):
FILE-INFO:FILE-NAME = pcDir.
IF INDEX(FILE-INFO:FILE-TYPE, "D") > 0
AND INDEX(FILE-INFO:FILE-TYPE, "W") > 0 THEN
RETURN TRUE.
ELSE
RETURN FALSE.
END FUNCTION.
FILE-NAME:FILE-TYPE以D开头表示目录,以F开头表示普通文件。它还包括有关阅读和写作权利的信息。查看帮助以了解更多信息。如果文件不存在,则除文件名之外的所有属性基本上都将为空或未知(?)
编辑:在某些情况下,即使该目录中没有实际的写入权限,FILE-TYPE似乎也会返回W,因此您可能需要通过错误处理来处理此问题
错误处理
OUTPUT TO VALUE("f:\personal\test.txt").
PUT UNFORMATTED "Test" SKIP.
OUTPUT CLOSE.
CATCH eAnyError AS Progress.Lang.ERROR:
/* Here you could check for specifically error no 98 indicating a problem opening the file */
MESSAGE
"Error message and number retrieved from error object..."
eAnyError:GetMessage(1)
eAnyError:GetMessageNum(1) VIEW-AS ALERT-BOX BUTTONS OK.
END CATCH.
FINALLY:
END FINALLY.
搜索
检查单个文件时,“搜索”命令将起作用。如果文件存在,则返回完整路径。但是,它对目录不起作用,只对文件起作用。如果搜索时没有完整路径,例如SEARCH(“test.p”)
命令将搜索PROPATH环境变量中设置的目录,并返回第一个匹配的完整路径条目。如果不匹配,它将返回未知值(?)
语法:
IF SEARCH("c:\temp\test.p") = ? THEN
MESSAGE "No such file" VIEW-AS ALERT-BOX ERROR.
ELSE
MESSAGE "OK" VIEW-AS ALERT-BOX INFORMATION.
如果要使用dailogue从用户处获取文件名/目录,SYSTEM-DIALOG获取文件字符字段有一个必须存在的选项。手册中的示例
DEFINE VARIABLE procname AS CHARACTER NO-UNDO.
DEFINE VARIABLE OKpressed AS LOGICAL INITIAL TRUE.
Main:
REPEAT:
SYSTEM-DIALOG GET-FILE procname
TITLE "Choose Procedure to Run ..."
FILTERS "Source Files (*.p)" "*.p",
"R-code Files (*.r)" "*.r"
MUST-EXIST
USE-FILENAME
UPDATE OKpressed.
IF OKpressed = TRUE THEN
RUN VALUE(procname).
ELSE
LEAVE Main.
END.
如果要使用dailogue从用户处获取文件名/目录,SYSTEM-DIALOG获取文件字符字段有一个必须存在的选项。手册中的示例
DEFINE VARIABLE procname AS CHARACTER NO-UNDO.
DEFINE VARIABLE OKpressed AS LOGICAL INITIAL TRUE.
Main:
REPEAT:
SYSTEM-DIALOG GET-FILE procname
TITLE "Choose Procedure to Run ..."
FILTERS "Source Files (*.p)" "*.p",
"R-code Files (*.r)" "*.r"
MUST-EXIST
USE-FILENAME
UPDATE OKpressed.
IF OKpressed = TRUE THEN
RUN VALUE(procname).
ELSE
LEAVE Main.
END.
您是指输出到值(文件路径)吗?您是指输出到值(文件路径)吗?只是澄清一下:SYSTEM-DIALOG GET-FILE用于打开操作系统级别的“open FILE”对话框,用户可以在其中选择文件。当你想要的时候很好,但不总是(日志文件、批报告等)。只是为了澄清:使用SYSTEM-DIALOG GET-FILE打开操作系统级别的“open FILE”对话框,用户可以在其中选择文件。当您需要时很好,但并非总是如此(日志文件、批报告等)。