我正在尝试从我的 Windows 机器网络中记录某些信息;我已将它们设置为定期收集此信息,然后我希望将其保存在网络驱动器上的单个 CSV 文件中。我正在使用 VBS 收集这些数据,在附加模式下使用 OpenTextFile 进行写入。这会允许多台计算机同时向该文件追加一行吗?或者还有另一种方法可以做到这一点(除了为每个设备存储一个单独的文件)。
我不关心订单(我从每台设备收集时间戳)。
我正在尝试从我的 Windows 机器网络中记录某些信息;我已将它们设置为定期收集此信息,然后我希望将其保存在网络驱动器上的单个 CSV 文件中。我正在使用 VBS 收集这些数据,在附加模式下使用 OpenTextFile 进行写入。这会允许多台计算机同时向该文件追加一行吗?或者还有另一种方法可以做到这一点(除了为每个设备存储一个单独的文件)。
我不关心订单(我从每台设备收集时间戳)。
Windows 有能力通过字节范围锁等机制共享对文件的并发访问,从而使进程仅锁定文件的特定区域等。但是必须适当地编写应用程序才能利用这一点。完全有可能以锁定整个文件的方式对您的应用程序进行编码,而不仅仅是其中的一个区域。您甚至可以锁定一个文件,使另一个进程甚至无法读取它。
但是,当您谈论访问网络文件共享上的文件时,事情就变得复杂了。现在我们通过 SMB 网络协议访问文件。
SMB 使用机会锁(机会锁)和租约来管理对文件的并发访问。机会锁和租约的类型如下:
机会锁
租约
Windows Internals 第 6 版,Mark Russinovich 等。
这些模式都不会为您提供您寻求的共享写访问权限。
改变你的策略。正如 MDMarra 所说,Windows 事件日志是更好的选择。另一个想法是让所有客户端写入文件共享中自己的文件,然后让服务器进程收集所有文件并聚合它们。您在问题中提到您正在编写代码,因此您可以更改此应用程序的工作方式。我建议去 StackOverflow 询问他们有关通过网络对单个文件进行共享写访问的最佳方法。
不可以。一旦打开文件进行写入,它就会被锁定。其他尝试在锁定时写入将导致“访问被拒绝”。
您应该考虑将这些事件写入本地事件日志,然后使用事件日志订阅将所有这些日志拉入中央源。从那里,您可以将其导出为您想要的任何格式。
处理这个问题的另一种方法可能是让每台机器在写入文件时都对文件进行独占锁定,然后立即释放它,并且还为每台机器编程一个循环,试图获得对该文件的写访问权,并且,在收到“访问被拒绝”消息只是重试,直到文件可用。此人的需要是将较短的日志消息附加到公共文件。因此每台机器只会短暂地锁定文件。用于获取独占写锁的循环将快速获得写访问权。如果每个进程都以追加模式写入,我相信这应该提供所需的功能,从而每台机器都可以根据需要添加到日志文件中。