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

时间:2011-11-09 11:41:01

标签: c# windows file-io

我有一个win服务,将文件“a.txt”写入文件夹“Input”。 从这里开始,另一个第三方服务会在文件“输出”中修改文件后将其放回原处。 使用文件名“a.txt”,我可以识别放置在Input中的文件已被处理并接收到bny Output。

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

5 个答案:

答案 0 :(得分:0)

也许您可以在输出中添加日期和时间到文件名。

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

    修改

    正如您所说,您无法更改文件名,第二个选项是在文件中写入日期和时间。

答案 1 :(得分:0)

您是否可以控制将a.txt写入输出的第三方服务?如果是这样,FileInfo.CreationTimeUtc既是读写又是写。将文件放入输出后,可能需要处理文件的创建时间,并在输出文件中设置该文件。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

正如您所说,您无法更改文件名称,您有以下选项

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

  • 为每个文件名维护一个“队列” 每当你生成一个文件时,你用临时文件夹中的唯一名称存储它 - 而不是“真实”名称(根据你的命名约定)...你维护一个集合(字典“真实”名称=> Querue of然后使用“真实”名称将唯一名称移动到“输入”文件夹,并将该名称添加到“WorkItem”-List ...当该文件出现在你的“输出”文件夹,然后你从“工作项” - 列表中删除它并从字典中的队列中出列...“移动到输入文件夹”始终首先检查“真实”名称是否已经在“工作项” “-List如果是的话就不会移动它。

答案 4 :(得分:0)

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

  1. 输入中的第三方存储文件:a.txt
  2. 您的程序识别a.txt并将其复制到Input / Queue / a.Timestamp.txt
  3. 您的程序将处理每个文件并将其复制到输出。
  4. 如果您不能在输出目录中使用Timestamp,则必须等到Output中的文件也被处理,因此您不会覆盖它。我在generell中看到的问题是如果文件a.txt上没有锁或类似的东西。 a.txt可以写两次,第一个版本根本不会被处理。就像已经说过更好的是某种非基于文件的队列或输入中更多的唯一名称。即使您没有直接控制第三方服务,这也可能是个大问题......