2011-01-12 60 views
1

我是Perl新手,已經創建了一個簡單的Perl程序。但是,它似乎從未在文件系統上找到文件。該代碼是:初學者問題 - Perl腳本找不到文件

my $filename = 'test.txt'; 
if (-e $filename) 
{ 
    print "exists"; 
} 
else 
{ 
    print "not found"; 
} 

我也曾嘗試使用文件「的test.txt」的確切路徑,但它仍然無法正常工作;它從來沒有找到該文件。有人知道我在做什麼錯嗎?

+1

代碼寫入沒有問題。你確定你正在執行與該文件相同的目錄下的腳本嗎?當你使用完整路徑時,你是從文件系統根目錄開始的嗎? – friedo 2011-01-12 04:04:08

+2

什麼是文件名?如果文件系統區分大小寫,並且實際名稱爲TeSt.TxT,則不會找到該文件。 – 2011-01-12 04:11:35

回答

3

你的代碼似乎是正確的,這意味着「test.txt」確實不存在(或者如果存在,它不在工作目錄中)。

舉例來說,如果你有這樣的:

/home/you/code/test.pl 
/home/you/test.txt 

而且像這樣運行代碼:

$ cd code 
$ perl test.pl 

那麼你的測試文件不會被發現。

這可能有助於使你的腳本打印當前工作目錄它做任何事情之前:

use Cwd; 
print getcwd(); 

... 
-2

使用該腳本:

my $filename=glob('*.txt'); 
print $filename; 
if (-e $filename) 
{ 
    print "exists"; 
} 
else 
{ 
    print "not found"; 
} 
0

寫的完整路徑文件。它應該工作。例如:

folder/files/file.txt 

,並可能使用「,而不是」

0

這裏有什麼可能是錯誤的一些可能性:

  1. 關於完整路徑:您正在使用Windows,並抄襲了例如:C:\myFolder\test.txt必須放入像這樣的變量:my $filename = "C:\\myFolder\\test.txt"
  2. 您的sc RIPT使用另一個目錄以外的一個文件是在這裏是你如何能找出執行你的腳本,並在那裏尋找相對文件路徑test.txt

    use strict; 
    use Cwd; 
    print getcwd; 
    

    如果你在錯誤的文件路徑,你有在執行腳本之前切換到正確的位置。爲此,請使用shell命令cd

  3. 您位於正確的目錄中和/或正在使用正確的完整路徑,但該文件具有其他名稱。您可以使用perl來查明實際名稱是什麼。在執行此腳本之前更改到文件所在的目錄:

    use strict; 
    opendir my $dirh, '.'; 
    print "'", join ("'\n'", grep $_ ne '.' && $_ ne '..', readdir $dirh), "'\n"; 
    closedir $dirh; 
    

    這將在當前目錄中以單引號打印所有文件。從文件中複製文件名並在代碼中使用它。

祝你好運! :)