2015-10-07 93 views
-1

我有一个小型脚本可以从要将文件复制到特定文件夹的目录中读取。我的脚本将从文件中读取并检查我们是否收到所有已成功复制的文件。如何检查文件是否已在Windows环境中使用

只要接收到所有文件,下一组作业就会被触发,处理这些文件。

我使用的是正常Input操作来读取文件:

if(open(FILE,abc.txt)) 
    print "it opened \n"; 
} else { 
    print "it did not open \n"; 
} 

上述方法没有工作,也读写(+<)没有工作。为什么?

+4

'use strict;使用警告;' – mob

+0

有什么问题? –

+0

这些文件被ftp编辑到该文件夹​​中。所以我想考虑一个文件已经收到,只有当文件已经完成复制到文件夹。我想如果我打开一个文件,当它被复制到(使用时)打开将不允许。但是我可以在使用文件时打开。我想验证.. – Deepak

回答

1

试试这个,如果你想检查文件是否存在:

if (-e 'abc.txt') 
{ 
    print "file exists\n"; 
} 

如果你正在寻找检查文件是否可进行读/写访问(即确保另一进程写入该文件是不没有Windows环境中的锁)最粗暴您可以搭乘无法打开文件条件:

open(INFO,  "+<datafile") || warn("can't open datafile: $!"); 

在windows我相信Determine whether a file is in use in Perl on Windows讨论如何捕捉但是未能出现一个小的原油。

该方法在https://stackoverflow.com/a/4200474/5182165看起来更令我满意。

我会建议看看fileno()或fcntl或在您的搜索中包含lsof以获取更多详细信息。

您可能也想看看作为http://docs.activestate.com/activeperl/5.8/lib/pods/perlopentut.html#file_locking

描述另一个有趣的方法来监视使用Win32 :: ChangeNotify文件更改目录作为Windows - Using perl monitor a directory for a new file drop/creation

讨论或者你可以使用羊群() Win32 :: File :: Object检查文件是否具有OFFLINE状态http://codeverge.com/perl.beginners/win32-file-attribs-example/144600

+0

我其实想检查文件是否已完全复制到驱动器中。所以我试图打开文件来检查文件是否仍在使用中(复制时),但即使文件被复制到该文件夹​​中(甚至文件正在使用中),我也可以打开文件... 。我想有一个验证,只有当文件已成功复制到该位置我应该考虑使用该文件.... – Deepak

+0

不确定你的用例是什么,但它也听起来像你可能通过看东西如https://en.wikipedia.org/wiki/CwRsync –

相关问题