Thi*_*iru -1 progress-4gl openedge
我已经编写了一个程序,用于将某些文本文件导出到特定目录,我更喜欢使用MTIME来使每个导出文件具有唯一名称,这是最好的方法,但是问题出在我们的服务器上,另一个过程是使用MTIME导出具有不同数据的相同文件名因此将有机会巧合和改写。您能告诉我拥有唯一文件名的最佳方法吗?让我分享一些样本。
DEFINE INPUT PARAMETER ipData1 AS CHARACTER NO-UNDO.
DEFINE INPUT PARAMETER ipData2 AS CHARACTER NO-UNDO.
DEFINE INPUT PARAMETER ipData3 AS CHARACTER NO-UNDO.
DEFINE VARIABLE cExportData AS CHARACTER NO-UNDO FORMAT 'X(250)'.
DEFINE VARIABLE cPath AS CHARACTER NO-UNDO.
DEFINE VARIABLE cExt AS CHARACTER NO-UNDO.
DEFINE VARIABLE cSFTL AS CHARACTER NO-UNDO FORMAT 'X(150)'.
DEFINE VARIABLE cMessageDateTime AS CHARACTER NO-UNDO.
ASSIGN
cPath = "R:\Downloads\progress\"
cExt = ".Txt"
cMessageDateTime = "123456789".
OUTPUT TO VALUE (cPath + cMessageDateTime + STRING(MTIME) + cExt ).
put unformatted ipData1 skip ipData2 skip ipData3 skip "End."
OUTPUT CLOSE.
Run Code Online (Sandbox Code Playgroud)
如果您看到示例,它与我的逻辑有关。我在另一个过程中从FOR EACH循环传递了3个输入参数,所以我可以使用唯一的名称但使用MTIME来获取每个文件。那么,您能告诉我另一种方法吗?
您有几种选择:
1)使用Progress提供的程序:adecomm / _tmpfile.p
define variable fname as character no-undo format "x(30)".
run adecomm/_tmpfile.p ( "xxx", ".tmp", output fname ).
display fname.
Run Code Online (Sandbox Code Playgroud)
2)使用GUID:
define variable fname as character no-undo format "x(30)".
fname = substitute( "&1&3&2", "xxx", ".tmp", GUID( GENERATE-UUID )).
display fname.
Run Code Online (Sandbox Code Playgroud)
3)要求Windows执行此操作(如果您始终在Windows上运行):
define variable fname as character no-undo format "x(30)".
fname = System.IO.Path:GetTempFileName().
display fname.
Run Code Online (Sandbox Code Playgroud)
4)反复试验:
define variable fname as character no-undo.
do while true:
fname = substitute( "&1&3&3", "xxx", ".tmp", string( random( 1, 1000 ), "9999" )).
file-info:filename = fname.
if file-info:full-pathname = ? then leave. /* if the file does NOT exist it is ok to use this name */
end.
display fname.
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
77 次 |
| 最近记录: |