2012-02-03 110 views
11

我一直在處理這個很長一段時間,所以任何幫助,非常感謝。所以,我正在下載一個文件並使用PhantomJS和CasperJS進行保存。讓我指出他們不是問題。該文件下載沒有問題。NodeJS fs.open在現有文件上失敗(不是路徑問題)

問題是NodeJS在下載後不會識別或打開文件。我不能fs.stat,fs.open等。沒有任何工作。

筆者給大家介紹的第二個代碼,但這裏的日誌:

Here: bdTcK6hSdownload.csv 

[ '2puzZMeLdownload.csv', 
    '2s5ICbKNdownload.csv', 
    'bdTcK6hSdownload.csv', 
    'izIfagwCdownload.csv' ] 

fs.js:230 

return binding.open(pathModule._makeLong(path), stringToFlags(flags), mode); 

Error: ENOENT, no such file or directory './caspertemp/bdTcK6hSdownload.csv' 

at Object.openSync (fs.js:230:18) 
at Object.processCSV (/Users/Home/dev/node_modules/inviter/index.js:64:29) 
at /Users/Home/dev/node_modules/inviter/index.js:36:33 
at ChildProcess.exithandler (child_process.js:281:7) 
at ChildProcess.emit (events.js:70:17) 
at maybeExit (child_process.js:361:16) 
at Process.onexit (child_process.js:397:5) 

正如你所看到的,我打印出所創建的文件名,然後打印目錄的內容,然後試圖打開文件。如您所見,bdTcK6hSdownload.csv存在於目錄中,但未能打開。

簡單的代碼片段是在這裏:

console.log('Here: ' + filename); 

filenames = fs.readdirSync('./caspertemp/'); 
console.log(filenames); 

var fd = fs.openSync('./caspertemp/' + filename, 'r'); 
console.log(fd); 

有一堆前後這更回事,但沒有它的重要,因爲這基本功能失效。請幫忙!這已經持續了數週。

+1

嗯。你有沒有檢查權限?另外,運行node.js像這樣: strace ./node - 這將跟蹤所有系統調用,並且您正在查找open(),檢查節點正在使用的路徑等。這將告訴您節點進程實際上在做什麼。 – EdH 2012-02-03 20:42:25

+0

@EdH 。對於權限是的。所有文件都有相同的權限: '-rw-r - r-- 1本地員工216102 Feb 3 15:00 bdTcK6hSdownload.csv' 同樣值得注意的是,如果我重新啓動節點,我可以訪問文件沒有問題 – Brandon 2012-02-03 21:13:07

+0

@ EdH.Hmm,由於某種原因,我無法在strace模式下運行:mac:dev Home $ strace -fF -o strace.lo g節點app.js -bash:strace:命令沒有找到 - 不知道我在做什麼錯誤的命令 – Brandon 2012-02-03 21:48:48

回答

3

我的猜測是這是目前工作目錄中的差異。你是否從同一目錄啓動casperJS和node.js進程?他們中的任何一個在運行時都改變工作目錄?嘗試這樣的事情,在節點的__dirname會給你當前執行的.js文件

var path = require("path"); 
var filename = "bdTcK6hSdownload.csv"; 
var csvPath = path.resolve(path.join(__dirname, "caspertemp", filename)); 
console.log(csvPath); 
+0

我欣賞周到的答案和示例,但是您可以從我發佈的代碼中看到它們正在返回相同的目錄。 caspertemp位於根目錄下,但工作目錄位於node_modules中。例如,如果我使用你的代碼並刪除__dirname變量,我得到:/Users/Home/dev/caspertemp/pwAA3Kzzdownload.csv ENOENT,沒有這樣的文件或目錄'/ Users/Home/dev/caspertemp /pwAA3Kzzdownload.csv – Brandon 2012-02-04 20:39:00

0

另一種可能性是定時的目錄路徑。

其中一個文件條目顯示在文件夾中直線距離,但該文件不能作爲東西寫它要麼沒有完成或尚未公佈它的處理我已經在過去的情況。在這種情況下,推遲處理或進行其他檢查以查看是否準備就緒並不罕見。

在這些情況下,可能是一個重新開始「修正」的東西,但只是因爲它的副作用,要麼釋放手柄或拖延處理,所以當你的代碼再改掉這一切都很好。

0

只有當你給錯誤的路徑時纔會出現這種情況。我遇到了同樣的問題。

起初,我正在運行的文件直接節點xyz.js和所需靜態文件都在同一庫中。但是當我做NPM開始,代碼被扔上面的錯誤:

fs.js 495 
    return binding.open(pathModule._makeLong(path), stringToFlags(flags), mode); 
    **Error: ENOENT, no such file or directory** 

然後我感動的靜態資源,改名路徑和它的工作。希望這可以幫助你。

0

文件擴展名可以被輸入兩次,因此未找到。導航到命令提示符的文件目錄,並獲得在該目錄中的文件列表

命令:

dir 

ls 

獲取實際的文件名存在並使用它。在我的情況下,我保存了一個文本文件作爲「自述文件。txt「並在命令提示符下顯示爲」readMe.txt.txt「。保存時不必追加文件擴展名,這就產生了問題。