为每个文件设置唯一文件名的最佳方法是什么?

What is the best way to have a unique file name for each files?

我编写了一个程序,用于将一些文本文件导出到特定目录。所以我更喜欢使用 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.

您可能还需要传递一个令牌或某种标识符,以使其真正独一无二。也许是用户名,或者机器启动了,诸如此类。那么我的建议是将其与

连接起来

REPLACE (STRING(TODAY),'/','') + STRING(MTIME).

编辑:尽管 OP 将我的回答标记为正确,但事实并非如此。查看 Tom 对此的回答以获得更好的选择。

您有多种选择:

  1. 使用Progress提供的程序:adecomm/_tmpfile.p

    将变量 fname 定义为字符 no-undo 格式“x(30)”。 运行 adecomm/_tmpfile.p(“xxx”,“.tmp”,输出 fname)。 显示 fname.

  2. 使用 GUID:

    将变量 fname 定义为字符 no-undo 格式“x(30)”。 fname = substitute("&1&3&2", "xxx", ".tmp", GUID( GENERATE-UUID ))。 显示 fname.

  3. 让Windows去做(如果你总是运行宁Windows):

    将变量 fname 定义为字符 no-undo 格式“x(30)”。 fname = System.IO.Path:GetTempFileName()。 显示 fname.

  4. 反复试验:

    将变量 fname 定义为字符 no-undo.

    当真时做:

    fname = substitute( "&1&3&2", "xxx", ".tmp", string( random( 1, 1000 ), "9999" ))。 file-info:文件名 = fname. 如果 file-info:full-pathname = ?然后离开了。 /* 如果文件不存在,可以使用这个名字 */

    结束。

    显示名字。

我以前用过这个。

("Filename" + 字符串(今天,"999999") + ".csv").