2012-10-17 8 views
5

Desidero leggere un file con FileSystemObject. Il mio codice è il seguente:Come utilizzare FileSystemObject per leggere il file in JavaScript

<!DOCTYPE html> 
<html lang="en"> 
<head> 
<title>Read json</title> 
</head> 

<body> 
<script type="text/javascript"> 

function readFile(filename){ 
    var fso = new ActiveXObject("Scripting.FileSystemObject"); 
    var ForReading = 1; 
    var f1 = fso.OpenTextFile(filename, ForReading); 
    var text = f1.ReadAll(); 
    f1.close(); 
    return text; 
} 

myJSONText = "text.txt"; 
var myObject = readFile(myJSONText);//eval('(' + myJSONText + ')'); 

document.write(myObject.name); 
</script> 
</body> 
</html> 
+0

Gah ... Ok, prima quel codice sembra a posto, finché sei in IE, quindi non sono sicuro di cosa ci sia che non va. ___BUT non farlo! ___ Stai cercando di preparare un file system locale da un browser client, che quasi tutti i browser non consentono. E anche se IE (solo versioni precedenti?) Lo consente in questo modo, è ancora un problema di sicurezza. Se vuoi leggere un file dovresti chiedere all'utente di caricarlo e leggerlo sul server (o leggerlo sul client usando le nuove API di file HTML5) –

+0

OK, grazie per il tuo aiuto. Ora, fammi provare. Molte grazie ancora. – Bryant

risposta

5

In primo luogo, vorrei ripetere alcuni commenti sopra. Non ho mai visto utilizzare il lato client ActiveXObject decantato come cosa che deve essere eseguita.

Ora, lasciami dire che sto cercando di imparare come farlo da solo. Ecco alcuni pensieri (e link utili, vedi in fondo) su questa domanda.

Il layout generale, secondo il "molto rumore per file di testo" su MSDN di scripting clinic column, è:

  1. creare l'oggetto.
  2. Creare un altro oggetto, utilizzando il primo, che utilizza un metodo del primo oggetto (ad esempio ottenere un file).
  3. Fare le cose a il file.
  4. Chiudere il file.

Come si avvia? Secondo IE Dev Center (collegato here), utilizzare un ActiveXObject in Javascript come segue:

newObj = new ActiveXObject(servername.typename[, location]) 

Hai che quando si dichiara fso nel codice. Che dire di questa cosa "nomeserver", non è il file a cui si accede localmente? Invece di "servername etc" hai inserito Scripting.FileSystemObject. Questo va bene, se la chiave di registro HKEY_CLASSES_ROOT sul PC host lo supporta (vedi ref sopra).

Una volta che ActiveXObject è stato dichiarato correttamente e se il browser lo consente (solo IE) e se l'utente finale accetta eventuali avvisi visualizzati ("Un controllo ActiveX su questa pagina potrebbe non essere sicuro per interagire con altre parti della pagina ... "ecc.), quindi l'oggetto consente di utilizzare uno dei metodi associati a tale oggetto. È qui che entra in gioco la potenza di Windows Scripting FileSystemObject.

Qualsiasi metodo FileSystemObject (fso) è ora disponibile per l'uso, che come suggerisce il nome, significa interazione di file (e directory) sul computer locale. Non solo la lettura, come la tua domanda è focalizzata, ma scrivendo e eliminando anche. Un elenco completo di metodi e proprietà è disponibile su MSDN here. Dopo essere stato utilizzato, chiudere il file utilizzando il metodo .close().

Quindi, questo è pericoloso per ovvi motivi. Ma all'inizio non mi è sembrato ovvio che queste interazioni con il filesystem potessero verificarsi in modo invisibile. C'è una buona probabilità che qualunque cosa tu faccia, dalla lettura di un file all'eliminazione di un albero di directory, non vengano visualizzati avvisi o prompt di comando per farti sapere cosa sta succedendo a causa delle poche righe di codice.

Lasciami terminare commentando gli ultimi bit di codice sopra. L'utilizzo di JSON insieme ai dati estratti da FileSystemObject offre un ottimo modo per consentire l'interazione JavaScript (JSON .parse and .stringify vengono immediatamente in mente).Con questo, i dati potrebbero essere archiviati localmente, forse come alternativa all'archivio locale HTML5 (rif this SO thread, che approfondisce ulteriormente questo concetto e un'altra domanda SO sollevata su questo here).

Ecco alcuni link per ulteriori letture:
IE Dev Center, JavaScript Objects, ActiveXObject
MSDN JScript Windows Scripting (compresi i metodi FileSystemObject, ecc)
MSDN Scripting Clinic (articoli anziani, molti collegamenti interrotti, ma stil un sacco di buone informazioni su questa roba)

+2

Commenti sulla pertinenza. Questa risposta si applica ai file HTA e ai file WScript nonché a IE. –