2012-02-03 5 views
11

Ho avuto a che fare con questo a lungo, quindi qualsiasi aiuto è molto apprezzato. Quindi, sto scaricando un file e salvandolo usando PhantomJS e CasperJS. Permettetemi di sottolineare che non sono il problema. Il file viene scaricato senza problemi.NodeJS fs.open errore su file esistente (non un problema di percorso)

Il problema è che NodeJS non riconoscerà o aprirà il file dopo che è stato scaricato. Non riesco a fs.stat, fs.open, ecc. Niente funziona.

io condividere il codice in un secondo, ma ecco il log:

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) 

Come potete vedere, sto stampando il nome del file creato, quindi la stampa il contenuto della directory e quindi cercando di aprire il file. Come puoi vedere, bdTcK6hSdownload.csv esiste nella directory ma fallisce all'apertura.

Il codice semplice frammento è qui:

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

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

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

C'è un gruppo più in corso, prima e dopo questo, ma nessuno di esso importa dal momento che questa funzione di base non riesce. Per favore aiuto! Questo è stato fastidioso per settimane.

+1

Hmm. Hai controllato le autorizzazioni? Esegui anche node.js In questo modo: strace ./node - questo traccerà tutte le chiamate di sistema e stai cercando un open(), controlla che il nodo del percorso stia usando, ecc. Questo ti dirà cosa sta effettivamente facendo il processo del nodo. – EdH

+0

@EdH Per autorizzazioni Sì. Tutti i file hanno le stesse autorizzazioni: '-rw-r - r-- 1 Personale domestico 216102 Feb 3 15:00 bdTcK6hSdownload.csv' Vale anche la pena notare che se riavvio il nodo posso accedi al file senza problemi – Brandon

+0

@ EdH.Hmm, non posso eseguire in modalità strace per qualche motivo: mac: dev Home $ strace -fF -o strace.lo g node app.js -bash: strace: comando non trovato - Non sono sicuro di cosa sto facendo male con quel comando – Brandon

risposta

3

La mia ipotesi è che si tratta di una discrepanza nella directory di lavoro corrente. Stai iniziando i processi casperJS e node.js dalla stessa directory? Entrambi cambiano directory di lavoro in fase di runtime? Provare qualcosa di simile, in cui il nodo di __dirname vi darà il percorso della directory del attualmente in esecuzione .js file di

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

Apprezzo la risposta premurosa e l'esempio, ma puoi vedere dal codice che ho postato che stanno restituendo la stessa directory. Il caspertemp è in root ma la directory di lavoro è in node_modules. Ad esempio, se utilizzo il codice e rimuovo la variabile __dirname, sto ricevendo questo: /Users/Home/dev/caspertemp/pwAA3Kzzdownload.csv ENOENT, nessun file o directory "/ Users/Home/dev/caspertemp /pwAA3Kzzdownload.csv – Brandon

0

Un'altra possibilità è il tempo.

In passato ho avuto situazioni in cui una voce di file viene visualizzata immediatamente nella cartella ma il file è inutilizzabile in quanto la scrittura non è stata completata o non è ancora stata rilasciata. In queste condizioni non è inusuale dover posticipare l'elaborazione o fare altri controlli per vedere se le cose sono pronte.

In tali casi è possibile che un riavvio risolva le cose, ma solo perché, come effetto collaterale, rilascia l'elaborazione o ritarda l'elaborazione, quindi quando il codice viene ripreso, va tutto bene.

0

Ciò si verifica solo quando si sta dando un percorso sbagliato. Ho incontrato lo stesso problema.

Inizialmente stavo eseguendo il file direttamente nodo xyz.js e i file statici richiesti sono nello stesso repository. Ma quando lo faccio NPM inizio, il codice stava gettando errore di cui sopra:

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

Poi mi sono trasferito risorse statiche, percorso rinominato e ha funzionato. Spero che questo possa aiutarti.

0

L'estensione del file può essere immessa due volte, quindi non trovata. Passare alla directory del file con il prompt dei comandi e ottenere l'elenco dei file nella directory

comando:

dir 

o

ls 

Prendi il nome del file effettivo lì e utilizzarlo. Nel mio caso avevo salvato un documento di testo come "readMe".txt "e al prompt dei comandi è apparso come" readMe.txt.txt ".Non ho dovuto aggiungere l'estensione del file durante il salvataggio e questo ha creato il problema.