【发布时间】:2019-02-07 18:03:03
【问题描述】:
我想检查两个文件句柄是否引用同一个文件。为此,我可以使用应用于每个文件句柄的stat 函数吗?
提前致谢
my $file = 'C:\temp\file.txt');
open( TXT1, "> $file" );
open( TXT2, "> $file" );
print( "The handles refer to the same file!") if (\TXT1 eq \TXT2);
【问题讨论】:
-
如果你在一个支持它的文件系统上,你可以比较来自stat的
dev和ino值。但是,您的文件名表明您在 Windows 上,这些值没有意义。 -
一般不能这样做。现有的文件句柄根本不需要与文件关联;可能是套接字/管道/等。您可以更改在该程序中打开文件的方式吗?然后你可以添加一个哈希来跟踪它们,例如使用
fileno -
注意:不是文件句柄R(末尾有“r”),是文件句柄(没有“r”)。它是一个句柄——与文件相关联并提供给我们的东西,以便我们可以处理文件。
-
第二次@zdim 的建议是使用词法文件句柄、三参数打开和错误处理。 File::Open 模块可以很好地为您包装所有这些,以及像 Path::Tiny 这样的模块。
-
@zdim,它被称为句柄,因为它允许我们持有系统资源。
标签: perl handler stat filehandler