读取连续附加的文件会导致问题吗?
Can reading a continuously appended file cause issues?
我们在另一台服务器上创建了日志文件,并使用以下方法不断附加状态和错误日志:
using (StreamWriter sw = File.AppendText(path))
{
}
这些在远程 Windows 机器上,我们通常会经历远程连接和通过记事本读取文件的繁琐过程。所以我正在考虑创建一个应用程序来在本地复制文件(使用 File.Copy()
之类的东西)或查看文件的当前快照或逐行查看(使用 FileInfo(path).OpenText().ReadLine()
或 .ReadToEnd()
).
我的问题是,如果我进行任何这些读取,是否会出现问题或冲突导致 运行 记录器出现异常?记录器集成到主要服务应用程序中,我不想因为读取日志文件而使我们的服务崩溃。
理论上应该是"fine",因为"fine"的某些含义。
File.AppendText()
返回的 StreamWriter
使用 FileShare.Read
打开文件,这允许其他进程读取该文件,即使它是为写入而打开的。在轮询结束时,您需要确保使用 FileShare.Write
打开文件,以允许其他进程(例如日志记录进程)打开文件,即使您已经打开文件进行读取也是如此。
当然,您有时可能会阅读部分数据。所以我想这在某种程度上取决于您对 "conflict" 的定义。 :) 但至少应该可以在不导致记录器抛出异常的情况下让它工作。
我们在另一台服务器上创建了日志文件,并使用以下方法不断附加状态和错误日志:
using (StreamWriter sw = File.AppendText(path))
{
}
这些在远程 Windows 机器上,我们通常会经历远程连接和通过记事本读取文件的繁琐过程。所以我正在考虑创建一个应用程序来在本地复制文件(使用 File.Copy()
之类的东西)或查看文件的当前快照或逐行查看(使用 FileInfo(path).OpenText().ReadLine()
或 .ReadToEnd()
).
我的问题是,如果我进行任何这些读取,是否会出现问题或冲突导致 运行 记录器出现异常?记录器集成到主要服务应用程序中,我不想因为读取日志文件而使我们的服务崩溃。
理论上应该是"fine",因为"fine"的某些含义。
File.AppendText()
返回的 StreamWriter
使用 FileShare.Read
打开文件,这允许其他进程读取该文件,即使它是为写入而打开的。在轮询结束时,您需要确保使用 FileShare.Write
打开文件,以允许其他进程(例如日志记录进程)打开文件,即使您已经打开文件进行读取也是如此。
当然,您有时可能会阅读部分数据。所以我想这在某种程度上取决于您对 "conflict" 的定义。 :) 但至少应该可以在不导致记录器抛出异常的情况下让它工作。