2017-05-05 119 views
0

我正在嘗試讀取文件的內容。該文件存在檢查通過,即使再讀取該文件節選如下圖所示:nodejs:無法讀取文件內容

var fs = require('fs') 
fs.exists('c:\\abc.txt',function(exists){ 
    console.log("exists"); 
    fs.readFile('c:\\abc.txt', 'UTF-8', function (err,data) { 
      if (err) { 
       console.log("err"+err); 
      }    
      console.log("data:"+data);     
    }); 
}); 

輸出

exists 
errError: ENOENT: no such file or directory, open 'c:\abc.txt' 
data:undefined 

我如何可以更正。

+0

fs.exists已棄用多年,請參閱https://nodejs.org/api/fs.html#fs_fs_exists_path_callback – baao

+0

反斜槓字符會取消後續字符具有的任何「特殊含義」,因此「\\」會被讀爲只需「\」,您需要編寫「\\\\」以獲得「\\」。這就是爲什麼即使你輸入了兩個也沒有文件「c:\ abc.txt」,只有一個反斜槓。 – illiteratecoder

回答

3

您的代碼不檢查fs.exists的結果是否存在該文件。您只需在回調中讀取您的文件即可。你需要檢查第一個參數來判斷它是真的(文件存在)還是假的(不)。目前,您的代碼完全沒有使用exists參數。 (還應該退出readFile回調或以其它方式使用data如果err不是null跳過位。)

fs.exists已棄用的年齡,並分別,有一個在檢查沒有點是否嘗試之前文件存在閱讀它,因爲它可以創建或刪除之後存在檢查但之前的讀取。剛剛嘗試讀取這個文件,並處理錯誤,如果你不能:

var fs = require('fs'); 
fs.readFile('c:\\abc.txt', 'UTF-8', function(err, data) { 
    if (err) { 
     console.log("err"+err); 
     return; 
    } 
    console.log("data:"+data);     
}); 

如果你真的想讀前檢查是否存在,你可以使用fs.existsSync(不推薦),其中至少降低了在檢查存在和讀取文件之間的窗口,但它仍然沒有多大意義。

+0

謝謝@TJ Crowder,雖然「.exists」現在可以使用,但它提到它不再受社區支持,可能會在更高版本中被棄用。 – BabyGroot

+0

@StillNestling:*「......可能會在更高版本中被棄用」*現在已經棄用**,並且已經有多年了。在某個時候它可能會被刪除。我一直在關注這個傳奇[一段時間](http://stackoverflow.com/questions/4482686/check-synchronously-if-file-directory-exists-in-node-js/4482701#4482701)。我不會建議使用棄用的API,特別是長期棄用的API。 –

+0

@TJ Crowder - 謝謝我已經刪除它 – BabyGroot