1

私が書いているプログラムは、2つのディレクトリを開き、それらのファイルを読み取って、それらのファイルの内容を比較することを想定しています。次に、ファイルで変更された関数をファイルに出力する必要があります。このプログラムは、主に.cppファイルと.hファイルをチェックします。

現在、ディレクトリを調べて現在のファイルを開き、変更された関数を印刷しようとしています。ただし、ファイルがファイルではなく、開くことができないというエラーが表示され続けます。

これが私が使用している現在のコードの一部です

use strict;
use warnings;
use diagnostics -verbose;
use File::Compare;
use Text::Diff;

my $newDir = 'C:\Users\kkahla\Documents\Perl\TestFiles2';
my $oldDir = 'C:\Users\kkahla\Documents\Perl\TestFiles';

chomp $newDir;
$newDir =~ s#/$##;
chomp $oldDir;
$oldDir =~ s#/$##;

# Checks to make sure they are directories
unless(-d $newDir or -d $oldDir) {
    print STDERR "Invalid directory path for one of the directories";
    exit(0);
}

# Makes a directory for the outputs to go to unless one already exists
mkdir "Outputs", 0777 unless -d "Outputs";

# opens output file
open (OUTPUTFILE, ">Outputs\\diffDirectoriesOutput.txt");
print OUTPUTFILE "Output statistics for comparing two directories\n\n";

# opens both directories
opendir newDir, $newDir;
my @allNewFiles = grep { $_ ne '.' and $_ ne '..'} readdir newDir;
closedir newDir;

opendir oldDir, $oldDir;
my @allOldFiles = grep { $_ ne '.' and $_ ne '..'} readdir oldDir;
closedir oldDir

ここで、ファイルを開いて読み通します。

elsif((File::Compare::compare("$newDir/$_", "$oldDir/$_") == 1)) {
    print OUTPUTFILE "File: $_ has been update. Please check marked functions for differences\n\n";
    diff "$newDir/$_", "$oldDir/$_", { STYLE => "Table" , OUTPUT => \*OUTPUTFILE};
    #Here is where I want to open the file but when I try it throws an error
    #Here are the two opens I have tried:
    open (FILE, "<$newDir/$_") or die "Can't open file"; #first attempt
    open (FILE, "<$_") or die "Can't open file"; #second attempt to see if it worked
}

フラグを追加してみました

my @allNewFiles = grep { $_ ne '.' and $_ ne '..' && -e $_} readdir newDir;
my @allNewFiles = grep { $_ ne '.' and $_ ne '..' && -f $_} readdir newDir;

しかし、それは単に.plファイル拡張子ではないすべてのファイルを削除するでしょう。.txt、.cpp、.h、.c、.py、および.plファイル拡張子の2つのコピーがあるいくつかの単純なディレクトリでテストしたところ、.plファイルがファイルであることが示されるだけでした。

私はperlを初めて使用するので、助けていただければ幸いです。

4

1 に答える 1

6

-fファイルへのパスではなくファイル名を渡しているため、「そのようなファイルまたはディレクトリはありません」undefに設定して返されます。$!-f

変化する

-f $_

-f "$newDir/$_"
于 2012-05-24T16:21:34.333 に答える