obtener tamaño de archivo<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Estoy usando JMP 10.0.0 con Windows 7 y me gustaría usar JSL para determinar el tamaño de un archivo en bytes dada una ruta de archivo. Aquí hay una estructura de ejemplo de lo que estoy tratando de lograr, donde en JMP 10.0.0 'tamaño de archivo()' no es una opción.
f_path=elegir archivo();
f_size=tamaño de archivo(f_path);
¿Existe algún método para determinar el tamaño del archivo sin abrirlo ni cargarlo?
Re: obtener tamaño de archivoGracias por todas las respuestas. Declarar una función usando la dll kernel32 funciona mejor para mi aplicación.
Re: obtener tamaño de archivo¡Bonito con función R, MS!
Para Windows, este es el camino más difícil.
// tamaño de archivo.jsl
fname = "c:/temp/bubble.jpg";
//******************************************
// con JMP versión 11
rc = if(el host es (Windows) & Versión JMP()=="11.0.0",
fs = Tamaño del archivo (fname);
);
//******************************************
// con archivo R.info {base}
// http://stat.ethz.ch/R-manual/R-devel/library/base/html/file.info.html
// devuelve un marco de datos con información diversa del archivo, ¿es un directorio?, tiempos, ID, etc.;
R Iniciar();
R Enviar(fname);
R enviar("\[
df = archivo.info(fname);
]\");
fs = R obtener(df$tamaño);
mostrar(fs); // en KB;
Término R();
//******************************************
// o, por las malas
// 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 = Cargar DLL( "kernel32" );
// usa createfile para recuperar una referencia a un archivo, es decir, un identificador de archivo
kernel32 << DeclareFunction( "CreateFileA", Convención( 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"),
Devuelve (Int32)
);
abierto_existente = 3;
hFile = kernel32 << CreateFile( fname, 0, 0, 0, open_existing, 0, 0);
// GetFileSize requiere un identificador de archivo (desde arriba)
kernel32 << DeclareFunction( "GetFileSizeEx", Convención (STDCALL), Alias( "GetFileSizeEx"),
Arg( Int32, "archivoh"),
Arg( Int32, "lpFileSize", actualización),
Devuelve (Int32)
);
fs = 0;
rc = kernel32 << GetFileSizeEx( hFile, fs );
mostrar(fs);
// limpiar
// http://msdn.microsoft.com/en-us/library/windows/desktop/ms724211(v=vs.85).aspx
kernel32 << DeclareFunction( "CloseHandle", Convención (STDCALL), Alias( "CloseHandle"),
Arg( Int32, "archivoh"),
Devuelve (Int32)
);
rc = kernel32 << CerrarHandle( hFile );
kernel32 << Descargar DLL();
Saludos cordiales,-Matt
Re: obtener tamaño de archivoSi tiene R instalado, esto debería funcionar (solo probado en JMP 10 para Mac):
R Iniciar () ;
mi camino = Seleccionar archivo () ;
R Ejecutar ( { mi camino } , { X } , "x <- archivo.info(miruta)$tamaño" ) ;
Espectáculo ( X ) ;
Término R () ;
Re: obtener tamaño de archivoLa función Tamaño de archivo() está disponible en JMP 11.
A continuación se muestra una modificación de una parte del script "2_Extra_MSDirUsingWeb.jsl" del capítulo 2 del libro "Aplicaciones complementarias JSL del lenguaje de scripting JMP".Es una solución fallida que funciona sólo para Windows.Tenga en cuenta que el script es un poco prolijo y tiene comandos adicionales para demostrar las funciones y el resultado.El script completo describe la sintaxis del comando dir de MS DOS.
==================================================== ==================================================== ======
// cmd_dir es el comando para obtener una lista de datos de muestra de JMP
// c:\temp\jmpDir.bat es el archivo de comando a ejecutar
// c:\temp\dirOut.txt es el archivo de resultados del comando dir
batFid = "c:\temp\jmpDir.bat" ;
fueraDir = "c:\temp\dirOut.txt" ;
// Obtener la ruta completa de un archivo
f_ruta0 = escoger archivo () ;
f_ruta = Convertir ruta de archivo ( f_ruta , ventanas ) ;
// Construye el comando "dir" de DOS
cmd_txt = "\[dir /-C /T:C /S "]\"
|| f_ruta
|| "\[" > ]\"
|| fueraDir ;
espectáculo ( cmd_txt ) ;
// Guardar en un archivo con extensión .bat.Windows interpreta archivos .bat
// igual que la ventana Ejecutar (ejecutar comando) en el botón Inicio
Guardar archivo de texto ( batFid , cmd_txt ) ;
// Windows interpreta este archivo de ruta "abierto" como "ejecutar"
t0 = Hoy () ;
Web ( batFid ) ;
Esperar ( 1 ) ;
// Espere un segundo hasta que se complete Windows, tal vez más si es un directorio enorme.
// Tenga en cuenta que esperar es el único control que tiene y luego mire para ver si el archivo existe.
// Mostrar resultados
// Un par de "verificaciones" que puedes emplear aquí si no existe o si es más antiguo de lo esperado
Si ( ! El archivo existe ( fueraDir ) | ( Fecha de creación ( fueraDir ) - t0 > 10 ) ,
Subtítulo ( "Hubo un problema con el comando dir, no se ejecutó. Abortando...") ;
Esperar ( 4 ) ;
Subtítulo ( Eliminar ) ;
Tirar () ;
) ;
_crlf = "\!NORTE" ;
resultados_dir = palabras ( Cargar archivo de texto ( fueraDir ) , _crlf ) ;
dir_size_str = palabras ( resultados_dir [ nitems ( resultados_dir ) - 1 ]) ;
tamaño_f = número ( dir_size_str [ 3 ]) ;
espectáculo ( dir_size_str , tamaño_f ) ; //número de bytes
//================================================== ==============================
//el siguiente comando crea un archivo que muestra los resultados del comando dir de DOS que se utilizó
//Abre el archivo de resultados
dir_dt = Abierto (
fueraDir ,
columnas ( Nombre ( "Resultados directos" ) = Personaje ) ,
Importar ajustes (
Fin de la línea ( CRLF ) ,
Fin del campo ( CRLF ) , // asegura solo 1 columna
Cotizaciones de tira ( 1 ) ,
Utilice el apóstrofe como comillas ( 1 ) ,
Escanear todo el archivo ( 1 ) ,
Tratar las columnas vacías como numéricas ( 0 ) ,
Etiquetas ( 0 ) ,
Inicios de datos ( 1 ) ,
Líneas para leer ( Todo ) ,
Regla del año ( "10-90" )
)
) ;