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