如何使用文件观察程序确定文本 (.txt) 文件何时已完成写入磁盘
How to determine when a text (.txt) file has finished being written to disk using a file watcher program
我让一家外部公司用 C# 编写了一个 "file watcher" 程序。该程序读取 excel sheet,其中包含要监视的文件夹的文件路径列表。 "file watcher" 程序查看它正在查看的每个文件夹中是否出现任何新的文本 (.txt) 文件。如果有新的文本文件,它会打开一个 excel sheet,其中包含一个宏并运行该宏,然后关闭 sheet。一切都很好……除了……文本文件是从 CMM(坐标测量机)自动生成的。
旁注:虽然,我已经进行了一些编程 类(Python、Matlab、VBA for Excel)。我绝不是编程专家,也不是计算机专家...
CMM 似乎创建了一个空的 .txt 文件(它显示为 0 kb),然后 CMM 似乎每隔几分钟就会转储一些数据。结果,文本文件将显示 7 kb,然后是 15 kb...等等...我可以在任何这些阶段单击此文本文件,它会打开,但只显示与完成的 kb 成比例的文本。如果我关闭文本文件然后重新打开它,通常会有更多的完成。 CMM(如果您不熟悉)正在测量零件并通过这些文本文件报告测量结果。有些零件需要 15 秒来测量(只有少数测量),有些需要 45 分钟(很多很多测量)。虽然我还没有确认这一点,但有一个 "Yes" / "No" 对话框弹出供 CMM 操作员在零件完成测量时单击,我认为它没有完成编写文本文件的最后一块,直到操作员做出 "Yes" 或 "No" 选择。操作员可以在 10 秒或 30 分钟内做出此选择(如果他们去吃午饭或其他什么)。事实上,在星期五,他们可以回家,直到星期一才做出选择。
我遇到的问题是 C# 程序在文本文件完成之前将文本文件的文件路径发送到 excel 宏。在我看来,在将 txt 文件的文件路径发送到 excel 宏之前,我需要将 C# 程序修改为 "wait" 以使文本文件完整。这可能吗?文本文件是否包含某种 EOF(文件结尾)标记?
如果您不能使用注释中的任何技巧,您应该将文件内容读入您的 C# 程序并将其保存为 Excel 或仅当 "End of Report" 为其他文本文件时检测到。如果没有,请在一分钟后重新开始。
也许(我不确定这会有多复杂)您可以将文件作为流读取并在写入后立即接收新数据。这样您就可以等待文件完成,而不必一遍又一遍地阅读它。
这是我找到的代码...
Dim cmdLine As Object
Dim result As String
Dim SearchStr As String
Dim FilePath As String
Set cmdLine = CreateObject("WScript.Shell")
result = cmdLine.Exec("%comspec% /C Find " & SearchStr & " " & Chr(34) & FilePath & Chr(34)).STDOut.ReadAll
我让一家外部公司用 C# 编写了一个 "file watcher" 程序。该程序读取 excel sheet,其中包含要监视的文件夹的文件路径列表。 "file watcher" 程序查看它正在查看的每个文件夹中是否出现任何新的文本 (.txt) 文件。如果有新的文本文件,它会打开一个 excel sheet,其中包含一个宏并运行该宏,然后关闭 sheet。一切都很好……除了……文本文件是从 CMM(坐标测量机)自动生成的。
旁注:虽然,我已经进行了一些编程 类(Python、Matlab、VBA for Excel)。我绝不是编程专家,也不是计算机专家...
CMM 似乎创建了一个空的 .txt 文件(它显示为 0 kb),然后 CMM 似乎每隔几分钟就会转储一些数据。结果,文本文件将显示 7 kb,然后是 15 kb...等等...我可以在任何这些阶段单击此文本文件,它会打开,但只显示与完成的 kb 成比例的文本。如果我关闭文本文件然后重新打开它,通常会有更多的完成。 CMM(如果您不熟悉)正在测量零件并通过这些文本文件报告测量结果。有些零件需要 15 秒来测量(只有少数测量),有些需要 45 分钟(很多很多测量)。虽然我还没有确认这一点,但有一个 "Yes" / "No" 对话框弹出供 CMM 操作员在零件完成测量时单击,我认为它没有完成编写文本文件的最后一块,直到操作员做出 "Yes" 或 "No" 选择。操作员可以在 10 秒或 30 分钟内做出此选择(如果他们去吃午饭或其他什么)。事实上,在星期五,他们可以回家,直到星期一才做出选择。
我遇到的问题是 C# 程序在文本文件完成之前将文本文件的文件路径发送到 excel 宏。在我看来,在将 txt 文件的文件路径发送到 excel 宏之前,我需要将 C# 程序修改为 "wait" 以使文本文件完整。这可能吗?文本文件是否包含某种 EOF(文件结尾)标记?
如果您不能使用注释中的任何技巧,您应该将文件内容读入您的 C# 程序并将其保存为 Excel 或仅当 "End of Report" 为其他文本文件时检测到。如果没有,请在一分钟后重新开始。
也许(我不确定这会有多复杂)您可以将文件作为流读取并在写入后立即接收新数据。这样您就可以等待文件完成,而不必一遍又一遍地阅读它。
这是我找到的代码...
Dim cmdLine As Object
Dim result As String
Dim SearchStr As String
Dim FilePath As String
Set cmdLine = CreateObject("WScript.Shell")
result = cmdLine.Exec("%comspec% /C Find " & SearchStr & " " & Chr(34) & FilePath & Chr(34)).STDOut.ReadAll