使用跨不同路径的元数据识别文件

本文关键字:元数据 识别 文件 路径 | 更新日期: 2023-09-27 18:14:01

我有一个win服务写入文件"a.t txt"文件夹"Input"。从这里开始,另一个第三方服务仔细检查文件,并在修改后将其放回文件夹"Output"中。使用文件名"a.t txt",我可以确定放置在Input中的文件已被处理并被Output接收。

我的问题是,同一文件的更新版本可能被写入"输入",即使我等待处理后的副本返回到"输出"。因此,在这种情况下,当我在"输出"中找到"a.t txt"时,我如何确定它是原始文件的哪个版本?我试着使用FileInfo。CreationTimeUtc属性,但这改变了"输出"。有什么建议吗?

使用跨不同路径的元数据识别文件

您是否可以控制第三方服务将a.t txt写入输出?如果是,则为FileInfo。CreationTimeUtc既可读又可写。将文件放入输出后,它可以从处理的文件中获取创建时间,并在output中的文件中设置它。

如果您不能控制第三方工具,那么您需要控制您唯一可以控制的东西——您编写的文件。如果写入"a.t txt"而不是写入"a.t timestamp.txt",则可以看到已处理的版本。

也许你可以在输出的文件名中加上日期和时间。

  1. 读取输入文件及其CreationTimeUtc
  2. 写入文件名为a- creationtimeut .txt的输出文件

编辑

当你说你不能更改文件名时,第二个选择是在文件本身中写入日期和时间

正如您所说,您不能更改文件名,您有以下选项

  • 如果第三方"服务"支持,则每个文件使用一个子目录

  • 为每个文件名维护一个"Queue"
    每当你生成一个文件时,你用一个唯一的名字存储在一个临时文件夹中——而不是用"真实"的名字(根据你的命名惯例)…您维护一个集合(具有"真实"名称的字典=>唯一名称的查询)和一个"工作项"列表…然后你把一个唯一的名字移动到"输入"文件夹中,并把它的"真实"名字添加到你的"工作项"列表中……当该文件出现在"输出"文件夹中,然后将其从"工作项"列表中删除,并将其从字典中的队列中取出。"移动到输入文件夹"总是首先检查"真实"名称是否已经在"工作项"列表中,如果是,它不会移动它。

您可以监视目录并将放在Input中的文件存储在第二个目录中(如果您确实不能使用相同的目录),并使用修改后的文件名。

  1. 第三方存储文件:Input: a.t txt
  2. 你的程序识别。txt并将其复制到Input/Queue/a.t timestamp .txt
  3. 程序将处理每个文件并将其复制到输出。

如果你不能在输出目录中使用时间戳,你将不得不等待,直到输出的文件也被处理,这样你就不会覆盖它。我在一般情况下看到的问题是,如果没有锁或类似的文件a.t txt。A.txt可以写入两次,第一个版本根本不会被处理。就像已经说过的。更好的方法是在Input中加入一些非基于文件的队列或更独特的名称。即使你不能直接控制第三方服务,这也可能是一个大问题…