ottenere la dimensione del file<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Sto utilizzando JMP 10.0.0 con Windows 7 e vorrei utilizzare JSL per determinare la dimensione del file in byte in base a un percorso file. Ecco una struttura di esempio di ciò che sto cercando di ottenere, dove in JMP 10.0.0 "dimensione file()" non è un'opzione.
f_percorso=scegli file();
f_size=dimensione del file(f_percorso);
Esiste un metodo per determinare la dimensione del file senza aprire o caricare il file?
Re: ottenere la dimensione del fileGrazie per tutte le risposte. Dichiarare una funzione utilizzando la dll kernel32 funziona meglio per la mia applicazione.
Re: ottenere la dimensione del fileBello con la funzione R, MS!
Per Windows, ecco la strada più difficile.
// dimensionefile.jsl
fname = "c:/temp/bubble.jpg";
//********************************************
// con JMP versione 11
rc = if(l'host è(Windows) e versione JMP()=="11.0.0",
fs = Dimensione file(nomef);
);
//********************************************
// con R file.info {base}
// http://stat.ethz.ch/R-manual/R-devel/library/base/html/file.info.html
// restituisce un frame di dati con varie informazioni sul file, è una directory?, orari, ID, ecc.;
R Inizia();
R Invia(nomef);
R invia("\[
df = file.info(nomef);
]\");
fs = R get(df$dimensione);
mostra(fs); // inKB;
R Termine();
//********************************************
// o nel modo più duro
// http://msdn.microsoft.com/en-us/library/windows/desktop/aa364955(v=vs.85).aspx
// http://msdn.microsoft.com/en-us/library/windows/desktop/aa364957(v=vs.85).aspx
kernel32 = Carica DLL("kernel32");
// usa createfile per recuperare un riferimento a un file, cioè un handle di file
kernel32 << DeclareFunction( "CreateFileA", Convenzione( STDCALL ), Alias( "CreateFile" ),
Arg( AnsiString( 256 ), "lpFileName" ),
Arg( Int32, "dwDesiredAccess" ),
Arg( Int32, "dwShareMode" ),
Arg( IntPtr, "lpSecurityAttributes" ),
Arg( Int32, "dwCreationDisposition" ),
Arg( Int32, "dwFlagsAndAttributes" ),
Arg(UIntPtr, "hTemplateFile" ),
Restituisce (Int32)
);
aperto_esistente = 3;
hFile = kernel32 <
// GetFileSize richiede l'handle del file (dall'alto)
kernel32 << DeclareFunction( "GetFileSizeEx", Convenzione( STDCALL ), Alias( "GetFileSizeEx" ),
Arg( Int32, "hFile" ),
Arg( Int32, "lpFileSize", aggiornamento ),
Restituisce (Int32)
);
fs = 0;
rc = kernel32 << GetFileSizeEx( hFile, fs );
mostra(fs);
// ripulire
// http://msdn.microsoft.com/en-us/library/windows/desktop/ms724211(v=vs.85).aspx
kernel32 << DeclareFunction( "CloseHandle", Convenzione( STDCALL ), Alias( "CloseHandle" ),
Arg( Int32, "hFile" ),
Restituisce (Int32)
);
rc = kernel32 <
kernel32 << Scarica DLL();
I migliori saluti, Matt
Re: ottenere la dimensione del fileSe hai installato R, dovrebbe funzionare (testato solo in JMP 10 per Mac):
R Inizial () ;
il mio cammino = Seleziona File () ;
R Esegui ( { il mio cammino } , { X } , "x <- file.info(miopercorso)$dimensione" ) ;
Spettacolo ( X ) ;
Termine R () ;
Re: ottenere la dimensione del fileLa funzione Dimensione file() è disponibile in JMP 11.
Di seguito è riportata una modifica di una parte dello script "2_Extra_MSDirUsingWeb.jsl" dal capitolo 2 del libro "JSL Companion Applications of the JMP Scripting Language".È una soluzione complicata che funziona solo per Windows.Nota, lo script è un po' prolisso e contiene comandi aggiuntivi per dimostrare le funzioni e l'output.Lo script completo descrive la sintassi del comando MS DOS dir.
================================================== ================================================== ======
// cmd_dir è il comando per ottenere un elenco di dati di esempio JMP
// c:\temp\jmpDir.bat è il file di comandi da eseguire
// c:\temp\dirOut.txt è il file dei risultati del comando dir
batFid = "c:\temp\jmpDir.bat" ;
outDir = "c:\temp\dirOut.txt" ;
// Ottieni il percorso completo di un file
f_percorso0 = seleziona il file () ;
f_percorso = Converti percorso file ( f_percorso , finestre ) ;
// Crea il comando DOS "dir".
cmd_txt = "\[dir /-C /T:C /S "]\"
|| f_percorso
|| "\[" > ]\"
|| outDir ;
spettacolo ( cmd_txt ) ;
// Salva in un file con estensione .bat.Windows interpreta i file .bat
// uguale alla finestra Esegui (comando di esecuzione) sul pulsante Start
Salva file di testo ( batFid , cmd_txt ) ;
// Windows interpreta questo file di percorso "aperto" come "esegui"
t0 = Oggi () ;
ragnatela ( batFid ) ;
Aspettare ( 1 ) ;
// Attendi un secondo per il completamento di Windows, forse di più se si tratta di una directory enorme.
// Nota che l'attesa è l'unico controllo che hai, quindi controlla se il file esiste.
// Mostra i risultati
// Un paio di "controlli" che potresti utilizzare qui se non esiste o se è più vecchio del previsto
Se ( ! Il file esiste ( outDir ) | ( Data di creazione ( outDir ) - t0 > 10 ) ,
Didascalia ( "Si è verificato un problema con il comando dir, non è stato eseguito. Interruzione...") ;
Aspettare ( 4 ) ;
Didascalia ( Rimuovere ) ;
Gettare () ;
) ;
_crlf = "\!N" ;
dir_results = parole ( Carica file di testo ( outDir ) , _crlf ) ;
dir_size_str = parole ( dir_results [ nitems ( dir_results ) - 1 ]) ;
f_dimensione = numero ( dir_size_str [ 3 ]) ;
spettacolo ( dir_size_str , f_dimensione ) ; //numero di byte
//================================================ =============================
//il comando seguente crea un file che mostra i risultati del comando DOS dir utilizzato
// Apre il file dei risultati
dir_dt = Aprire (
outDir ,
colonne ( Nome ( "Risultati nella directory" ) = Carattere ) ,
Importa impostazioni (
Fine della linea ( CRLF ) ,
Fine del campo ( CRLF ) , // garantisce solo 1 colonna
Citazioni sulla striscia ( 1 ) ,
Usa l'apostrofo come virgoletta ( 1 ) ,
Scansiona l'intero file ( 1 ) ,
Tratta le colonne vuote come numeriche ( 0 ) ,
Etichette ( 0 ) ,
Inizio dati ( 1 ) ,
Righe da leggere ( Tutto ) ,
Regola dell'anno ( "10-90" )
)
) ;