获取文件大小<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />我在 Windows 7 中使用 JMP 10.0.0,并且希望使用 JSL 来确定给定文件路径的文件大小(以字节为单位)。 这是我想要实现的示例结构,其中在 JMP 10.0.0 中“文件大小()”不是一个选项。
f_path=选择文件();
f_size=文件大小(f_path);
有没有一种方法可以在不打开或加载文件的情况下确定文件大小?
回复:获取文件大小感谢您的所有回复。使用 kernel32 dll 声明函数最适合我的应用程序。
回复:获取文件大小不错的一款,带有 R 功能,MS!
对于 Windows,这是一个困难的方法。
// 文件大小.jsl
fname = "c:/temp/bubble.jpg";
//************************************************
// 使用 JMP 版本 11
rc = if(主机是(Windows) & JMP Version()=="11.0.0",
fs = 文件大小(fname);
);
//************************************************
// 使用 R file.info {base}
// http://stat.ethz.ch/R-manual/R-devel/library/base/html/file.info.html
// 返回一个包含各种文件信息的数据帧,是目录、时间、ID 等;
R 初始化();
R 发送(fname);
R 提交(“\[
df = 文件.info(fname);
]\");
fs = R get(df$size);
显示(fs); // 以KB为单位;
R 项();
//************************************************
// 或者,困难的方法
// 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 = 加载 DLL(“kernel32”);
// 使用createfile 检索文件的引用,即文件句柄
kernel32 << DeclareFunction( "CreateFileA", 约定( 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" ),
返回( Int32 )
);
开放现有 = 3;
hFile = kernel32 << CreateFile( fname, 0, 0, 0, open_existing, 0, 0);
// GetFileSize 需要文件句柄(来自上面)
kernel32 << DeclareFunction( "GetFileSizeEx", 约定( STDCALL ), Alias( "GetFileSizeEx" ),
arg(Int32,“hFile”),
Arg( Int32, "lpFileSize", 更新 ),
返回( Int32 )
);
fs = 0;
rc = kernel32 << GetFileSizeEx( hFile, fs );
显示(fs);
// 清理
// http://msdn.microsoft.com/en-us/library/windows/desktop/ms724211(v=vs.85).aspx
kernel32 << DeclareFunction( "CloseHandle", 约定( STDCALL ), Alias( "CloseHandle" ),
arg(Int32,“hFile”),
返回( Int32 )
);
rc = kernel32 << CloseHandle( hFile );
kernel32 << 卸载 DLL();
最好的问候,-马特
回复:获取文件大小如果您安装了 R,这应该可以工作(仅在 JMP 10 for Mac 中测试):
R初始化() ;
我自己的路=选择文件() ;
R 执行( {我自己的路} , { X } , “x <- file.info(mypath)$size” ) ;
展示( X ) ;
R 项() ;
回复:获取文件大小JMP 11 中提供了 File Size() 函数。
下面是对“JMP 脚本语言的 JSL 配套应用程序”一书第 2 章中的脚本“2_Extra_MSDirUsingWeb.jsl”的一部分的修改。这是一个仅适用于 Windows 的拼凑解决方案。请注意,该脚本有点冗长,并且有额外的命令来演示功能和输出。完整的脚本描述了 MS DOS dir 命令的语法。
=================================================== =================================================== ======
// cmd_dir 是获取 JMP 样本数据列表的命令
// c:\temp\jmpDir.bat 是要运行的命令文件
// c:\temp\dirOut.txt 是 dir 命令的结果文件
蝙蝠菲德= “c:\temp\jmpDir.bat” ;
输出目录= “c:\temp\dirOut.txt” ;
// 获取文件的完整路径
f_路径0 =选择文件() ;
f_路径=转换文件路径( f_路径,视窗) ;
// 构建 DOS“dir”命令
cmd_txt = "\[dir /-C /T:C /S "]\"
|| f_路径
|| “\[” > ]\”
||输出目录;
展示( cmd_txt ) ;
// 保存到扩展名为 .bat 的文件。Windows 解释 .bat 文件
// 与Start按钮上的Run(运行命令)窗口相同
保存文本文件(蝙蝠菲德, cmd_txt ) ;
// Windows 将这个“打开”路径文件解释为“运行”
t0 =今天() ;
网络(蝙蝠菲德) ;
等待( 1 ) ;
// 等待 Windows 完成,如果目录很大,可能需要更长的时间。
// 请注意,等待是您拥有的唯一控制权,然后查看文件是否存在。
// 显示结果
// 如果它不存在或比预期早,您可以在此处使用一些“检查”
如果( !文件已存在(输出目录) | (创建日期(输出目录) - t0 > 10 ) ,
标题( “dir 命令出现问题,它没有运行。 正在流产……”) ;
等待( 4 ) ;
标题(消除) ;
扔() ;
) ;
_crlf = “\!N” ;
目录结果=字(加载文本文件(输出目录) , _crlf ) ;
目录大小_str =字(目录结果[尼特姆斯(目录结果) - 1 ]) ;
f_大小=编号(目录大小_str [ 3 ]) ;
展示(目录大小_str , f_大小) ; //字节数
//================================================== =============================
//下面的命令创建一个文件,显示所使用的 DOS dir 命令的结果
// 打开结果文件
目录_dt =打开(
输出目录,
列(姓名( “目录结果” ) =特点) ,
导入设置(
行结束(回车换行) ,
场结束(回车换行) , // 确保只有 1 列
剥离报价( 1 ) ,
使用撇号作为引号( 1 ) ,
扫描整个文件( 1 ) ,
将空列视为数字( 0 ) ,
标签( 0 ) ,
数据开始( 1 ) ,
要读的行(全部) ,
年份规则( “10-90” )
)
) ;