uiclasspath是什么路径 里面有获取文件存放路径的控件吗

一、前言                        
& 当写模块加载器时,获取当前脚本文件的绝对路径作为基础路径是必不可少的一步,下面我们一起来探讨一下这个问题吧!
二、各大浏览器的实现方式                
& [a]. Chrome和FF
& 超简单的一句足矣!
var getCurrAbsPath = function(){
return document.currentScript.
这里利用了对象&document.currentScript ,它返回的是当前执行的script元素;然后调用script元素的src属性即可获取脚本文件的绝对路径。
& [b]. IE10+、Safari和Opera9
&利用Error对象的stack属性(IE10+)、sourceURL属性(Safari)和stacktrace属性(Opera9)萃取绝对路径
var getCurrAbsPath = function(){
var a = {},
stack = e.stack || e.sourceURL || e.
var rExtractUri = /(?:http|https|file):\/\/.*?\/.+?.js/,
absPath = rExtractUri.exec(stack);
return absPath[0] || '';
& [C]. IE5.5~9
&遍历文档中的script标签
var getCurrAbsPath = function(){
var scripts = document.
var isLt8 = ('' + document.querySelector).indexOf('[native code]') === -1;
for (var i = scripts.length - 1, script = scripts[i--];){
if (script.readyState === 'interative'){
return isLt8 ? script.getAttribute('src', 4) : script.
三、相关知识介绍                      
IE5.5~9下script的readyState表示该script元素的状态,分别有以下的状态值:
uninitialized:未初始化
loading:正在加载
loaded:加载完成
interative:执行中
complete:执行完
可通过订阅onreadystatechange事件来监听script元素状态的变化。但不幸的是loaded和complete状态并出现顺序不定且有可能仅出现其中一个,因此建议在动态添加script元素时,先设置src属性后再将script元素添加到DOM树中,这样loaded和complete状态仅会出现其中一个(虽然每次请求时,哪个出现是不定的),比较好监测。
四、IE和FF下的另一种方式                
&通过订阅&window.onerror 事件,事件处理函数将接受三个参数,分别是msg,url和num。这里url就是当前脚本的绝对路径了。
五、总结                        
&完整的getCurrAbsPath请浏览
&尊重原创,转载请注明来自:,^_^肥仔John
阅读(...) 评论()vc中如何通过控件获取已打开文件的路径信息_百度知道
vc中如何通过控件获取已打开文件的路径信息
我有更好的答案
CFileDialog在关闭后,可以通过它的GetPath、GetFile等接口获取选择文件的路径和名称;如果是你自己写的控件,那就得你自己实现了
采纳率:57%
来自团队:
你是sdi/mdi的界面编程吗?
是的话,自己重写一个打开文件函数onfileopen,调用cfiledialog类获取路径,最后用该类的getpathname方法获得文件的绝对路径中,储存到容器中,用到的时候再取。
还有就是看你的控件有没有提供相应的方法了。
为您推荐:
其他类似问题
紧身裤的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。求问按键精灵如何获得浏览框文件路径并读取内容_百度知道
求问按键精灵如何获得浏览框文件路径并读取内容
我建立一个自动输入账号的脚本,设立一个浏览框,读取txt文件路径,并读取txt文件内容
另外,有个输入框,读取里面的文件内容,便于以后输入
脚本如下:
H = Form1.BrowseBox1.PathHH = Plugin.File.ReadFileEx(H)Text1 = Plugin.File.ReadFileEx(HH)nc = For...
我有更好的答案
/得到路径文本内容 = Plugin.File.BrowseBox1.Path/获取文本全部内容,下面要用的话需要分拆出来.或者用字符串函数得到需要的值昵称 = Form1.InputBox1.Text&#47路径 = Form1.ReadFileEx(路径)/&#47
能不能说的详细些。。。我上面就是这样写的,但是无效啊Text1 = Plugin.File.ReadFileEx(&HH&)后面读取txt文件,用这句话对吗?
你上面写的哪里是一样的?明明多了一句.你用调试输出命令就可以看到变量的值是多少.&HH&加了双引号就成了字符串不是变量了.Text1已经读取保存了文件的文本内容,你还想从它里面读取到什么?
采纳率:74%
为您推荐:
其他类似问题
按键精灵的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。html&获得file文本完整路径
相 信很多人都使用过&input
type="file"/&这样的HTML控件,它看起来非常普通,是我们在做Web应用程序中用于上传客户端本地文件时不可缺少的控件,然而最近
我发现这个控件在最新的FireFox浏览器(或者最新的IE8中也会存在这个问题,我没有尝试过,读者可以试一下)中却失去了效果,导致我们在通过这个
控件的value属性得到的值中只包含了文件名而没有文件路径,这个在IE7中是可以正常获取到全文件名的(即文件完整路径+文件名)。IE7和大部分当
前流行的浏览器(如FireFox2版本)都可以获取到文件的路径,但是FireFox3却不行,我查了很多资料,发现这是FireFox3为了弥补在低
版本中可能会引起安全问题的一个漏洞,据说黑客会通过FireFox的这一安全隐患向服务器上传文件!其实我也搞不懂,不就是本地文件的路径么?怎么会影
响到服务器的安全问题呢?看来高手们还真的很强!!
来说说我为什么要得到本地所选的文件的路径。大家都知道163邮箱,里面在上传邮件附件的时候是允许选择多附件的,我要做的功能类似于这个,不过我在这里
并不是要研究163是如何实现这个功能,我只想在用户选择文件的时候动态在一个Div中添加他所选择的文件的信息和一个删除按钮,然后将这个文件的信息保
存在页面的一个隐藏域中,当用户保存页面时服务器端代码根据页面隐藏域中的信息将用户所选的文件上传到服务器上。当然,页面隐藏域中的信息至少要包含用户
本地所选文件的路径,否则就不知道在什么地方去找文件了。有关如何实现动态添加HTML节点不是本文的重点,这里我也不贴代码了,下面说说我所遇到的问
下面是一段用于测试问题的代码。
&!DOCTYPE html PUBLIC
"-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&
xmlns="http://www.w3.org/1999/xhtml"&&
&title&Untitled
Page&/title&
&input id="File1"
type="file"&/&&input
id="btAdd" type="button" value="Add"
onclick="alert(document.getElementByIdx_x('File1').value);"&/&
运行后在IE7中的结果:
运行后在FireFox3中的结果:
那么我如何才能在FireFox3中取得本地文件的路径呢?就像上面我在IE7中得到的那个值一样!暂且撇开这个问题,先说说在FireFox3中如何上
传一个文件吧。既然FireFox3中将获取本地文件的路径的方法当做一个安全隐患被禁止了,那么它一定有相关的方法来解决这个问题,否则
FireFox3就不能实现在客户端上传文件的功能了,就像前两天我的一个同事说的一样,要真是这样,FireFox就废了!其实FireFox3中引入
了一个新的接口用来解决这个问题,那就是nsIDOMFile,它专门被用来从客户端的input
type="file"的控件中获取文件数据,这样就可以将本地的文件保存到服务器上。这是一个非常好的解决办法,以至于我们在FireFox3中开发这
样的应用程序时比先前简单获取value值然后再通过服务器端代码上传文件要简单许多,不过令人担忧的是,这个接口只适用于FireFox,在IE和其它
的浏览器中并不支持。一会儿再说如何解决浏览器的兼容性问题,先看一下在FireFox3中怎么使用nsIDOMFile。
&!DOCTYPE html PUBLIC
"-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"&
xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"
lang="en"&
&meta http-equiv="Content-Type" content="text/
charset=utf-8"&/&
&title&input type=file
type=file & Firefox
type="text/javascript"&
// &![CDATA[
function inputFileOnChange()
if(document.getElementByIdx_x('my-file').files) {
// Support: nsIDOMFile, nsIDOMFileList
alert('value: '&+
document.getElementByIdx_x('my-file').value);
alert('files.length: '&+
document.getElementByIdx_x('my-file').files.length);
alert('fileName: '&+
document.getElementByIdx_x('my-file').files.item(0).fileName);
alert('fileSize: '&+
document.getElementByIdx_x('my-file').files.item(0).fileSize);
alert('dataurl: '&+
document.getElementByIdx_x('my-file').files.item(0).getAsDataURL());
alert('data: '&+
document.getElementByIdx_x('my-file').files.item(0).getAsBinary());
alert('datatext: '&+
document.getElementByIdx_x('my-file').files.item(0).getAsText("utf-8"));
&input type="file" name="my-file" id="my-file"
onchange="inputFileOnChange();"&/&
document.getElementByIdx_x('my-file').files方法用于获取到用户所选择的文件的集合,一般情况下都是选择单一文件
(貌似FireFox这样做是支持多文件选择的,不过没有试过,读者可以自己去尝试),item数组可以得到其中的某一个文件,然后我们就可以使用
nsIDOMFile所提供的属性和方法了。它包括2个属性和3个方法:
fileName:用于获取到用户所选文件的名称,这和直接取value值所得到的结果一样。
fileSize:得到用户所选文件的大小。
getAsBinary():得到用户所选文件的二进制数据。
getAsDataURL():得到用户所选文件的路径,该路径被加密了,目前只能在FireFox中使用。
getAsText():得到用户所选文件的指定字符编码的文本。
读者可以参考这个地址:
有一点需要说明,方法getAsDataURL()可以取得用户所选文件的本地路径,但是这个路径的字符串文本被FireFox加密了,并且这段密文只能
被FireFox识别,其它的浏览器不能识别,也就是说我将被加密后的路径直接赋值给一个img标签的src属性,在FireFox中是可以直接显示出图
片的,而在IE中却不行。从这一点来看,FireFox是不是有点王者风范呢?居然连大名鼎鼎的IE都不支持!
再回到本文一开始所提的那个问题上来。即然我不能在FireFox中得到用户所选文件的本地路径,而且采用getAsDataURL()方法得到的这个路
径也不能体现通用性,那怎么才能彻底解决这个问题呢?简单思考一下,浏览器为什么能够调用OS的文件打开对话框,从而进一步得到用户所选的文件的信息呢?
浏览器不是仅仅只能解释HTML文本么?没错,这个是浏览器的基本功能,至于如果调用OS提供的功能接口,那是浏览器的各个不同厂商自己要做的工作,这个
似乎没有一个统一的标准,也不会被列入到W3C的规范中,FireFox3就是一个特例。这样看来,我们只有自己编写代码来调用OS的文件打开对话框了,
这看起来是一件非常辛苦的事情,最好的办法莫过于编写ActiveX控件嵌入到浏览器中来执行,幸运的是IE和FireFox都提供了现成的方法供我们调
用,我们只需要在js脚本中调用即可。当得知这一点时,我差点高兴得一晚上没有睡觉。
好了,现在来看我是怎么做的了!
&title&Untitled
Page&/title&
type="text/javascript"&
function readFile(fileBrowser) {
(navigator.userAgent.indexOf("MSIE")!=-1) //判断是否是ie浏览器
readFileIE(fileBrowser);
(navigator.userAgent.indexOf("Firefox")!=-1&||
navigator.userAgent.indexOf("Mozilla")!=-1) //判断是否是火狐浏览器
readFileFirefox(fileBrowser);
alert("Not IE or Firefox (userAgent="&+
navigator.userAgent +&")");
function readFileFirefox(fileBrowser)
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
&&& catch (e)
alert('无法访问本地文件,由于浏览器安全设置。为了克服这一点,请按照下列步骤操作:(1)在地址栏输入"about:config";(2)
右键点击并选择 New-&B (3)
输入"signed.applets.codebase_principal_support"
(不含引号)作为一个新的首选项的名称;(4) 点击OK并试着重新加载文件'');
fileName=fileBrowser.
//这一步就能得到客户端完整路径。下面的是否判断的太复杂,还有下面得到ie的也很复杂。
&&& var file =
Components.classes["@mozilla.org/file/1"]
.createInstance(Components.interfaces.nsILocalFile);
// Back slashes for windows
file.initWithPath( fileName.replace(/\//g, "\\\") );
&&& catch(e)
if (e.result!=Components.results.NS_ERROR_FILE_UNRECOGNIZED_PATH)
alert("File '"&+ fileName +&"'
cannot be loaded: relative paths are not allowed. Please provide an
absolute path to this file.");
file.exists() ==&false ) {
alert("File '"&+ fileName +&"'
not found.");
alert(file.path); // I test to get the local file's path.
&&& var is =
Components.classes["@mozilla.org/network/file-input-1"].createInstance(
Components.interfaces.nsIFileInputStream );
is.init( file,0x01, 00004, null); }
&&& catch (e)
if (e.result!=Components.results.NS_ERROR_FILE_ACCESS_DENIED) throw
alert("Unable to access local file '"&+ fileName
+&"' because of file permissions. Make sure the
file and/or parent directories are readable.");
&&& var sis =
Components.classes["@mozilla.org/s1"].createInstance(
Components.interfaces.nsIScriptableInputStream );
&&& sis.init( is
data = sis.read( sis.available() );
alert("Data from file: "&+ data); //
I test to get the local file's data.
function readFileIE(fileBrowser) {
var fso =&new
ActiveXObject("Scripting.FileSystemObject");
var fileName=fso.GetAbsolutePathName(fileBrowser.value);
if (!fso.FileExists(fileName)) {
&&&&&&&&&&&
alert("File '"&+ fileName +&"'
not found.");
&&&&&&&&&&&
var file = fso.OpenTextFile(fileName, 1);
data = file.ReadAll();
alert("Data from file: "&+
file.Close();
&&& catch(e)
if (e.number ==&-) {
&&&&&&&&&&&
// This is what we get if the browser's security settings
&&&&&&&&&&&
// the use of the FileSystemObject ActiveX control
&&&&&&&&&&&
alert('Unable to access local files due to browser security
settings. To overcome this, go to Tools-&Internet
Options-&Security-&Custom Level. Find
the setting for "Initialize and script ActiveX controls not marked
as safe" and change it to "Enable" or "Prompt"');
else&if (e.number ==&-)
&&&&&&&&&&&
// This is what we get if the browser can't access the file
&&&&&&&&&&&
// because of file permissions
&&&&&&&&&&&
alert("Unable to access local file '"&+ fileName
+&"' because of file permissions. Make sure the
file and/or parent directories are readable.");
&form name="form1"&
&&& Browse to
select a file
&input type="file" name="fileBrowser" size="125"
onchange="readFile(this)"&/&
首先我们需要判断用户浏览器的类型来选择执行不同的function,IE中直接调用Scripting.FileSystemObject这个
ActiveXObject,不过如果用户的IE没有打开“对未标记为可安全执行脚本的ActiveX控件初始化并执行脚本”的话是不能执行这行代码的,
在脚本中给出了提示,告诉用户必须将这个选项打开。
IE的问题不大,因为我们完全可以直接使用input的value值得到文件的路径,这里给出的方法主要是可以得到文件的二进制数据,重点看看在
FireFox3中是如何做的。FireFox3中需要用户在配置页面中添加一个名称为
signed.applets.codebase_principal_support的键值,将值设为true,然后就可以通过代码中给出的方法得到文
件的本地路径了,同样也可以得到文件的二进制数据。下面是在ForeFox3中成功获取到本地文件路径的截图。
有关about:config和如何配置FireFox浏览器,读者可以参考下面的链接:
这样,我的问题就可以解决了,不管是在IE中,还是在FireFox中,我都可以获取到用户所选文件的本地路径,然后保存在页面的隐藏域中,当用户提交页面时,服务器端代码便可以通过页面隐藏域中的值得到用户所选择的文件的路径,从而上传文件到服务器。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。当前位置: →
→ 关于WebForms下面FileUpload控件获取FileName的一个注意点
关于WebForms下面FileUpload控件获取FileName的一个注意点
& 作者及来源: SZW - 博客园 &
&收藏到→_→:
摘要: 关于WebForms下面FileUpload控件获取FileName的一个注意点
"关于WebForms下面FileUpload控件获取FileName的一个注意点"::
&&& 这个问题源自一位热心而且踏实的读者,发现《asp.net 3.5+ 网站开发全程实录》中第117页的一段实例代码:
using&using&system.using&system.web.using&system.web.ui.public&partial&class&uploadfile&:&system.web.ui.page{&&&&protected&void&uploadfile_click(object&sender,&eventargs&e)&&&&{&&&&&&&&&&&&&&&&filesize.innerhtml&=&uploadfile.postedfile.contentlength.tostring();&&&&&&&&//获取上传文件名&&&&&&&&string&thefiledir&=&uploadfile.postedfile.//获取文件名的完整路径&&&&&&&&&&&&}}
&&& 经过这位朋友的严格跟踪测试,发现postedfile.filename并不是“获取文件名的完整路径”,而只是文件名。&&& 起初我也愣了一下,于是赶紧测试,发现确实是文件名,而不是完整路径。但是在我记忆中,非常确定这个方法是可以获取到完整路径的。于是静下心来一想,真相只有一个——浏览器!&&& 着手验证。&&& 上传本地物理路径的文件d:\testupload.jpg。&&&&&&& 用ie7/ie8获取postedfile.filename结果如下:testupload.jpg。&&&&&&& 用ie6获取postedfile.filename结果如下:d:\testupload.jpg。&&& 同时使用httpwatch跟踪了一下,发现从post的环节上,就已经显现出上述差别:&&&&&&& ie7/8:filename="testupload.jpg" content-type: image/pjpeg&&&&&&& ie6:filename="d:\testupload.jpg" content-type: image/pjpeg
&&& 于是问题已经本明了了:不同的浏览器对于post&input type="file" /&的值(一般这个值中包含了两个信息,分别是[路径+]文件名以及contenttype)有所差别(其本质除了浏览器的行为因素外,还有默认安全设置的问题)。
&&& 因此得出一个更加周全的处此文来自: 马开东博客
转载请注明出处 网址:
理建议:使用fileupload控件在获取文件名的时候,尽量使用path.getfilename(uploadfile.postedfile.filename)这样的方法,将其视同完整路径来处理,这样可以使任何浏览器下面都能得到正确的文件名,而不会包含路径(书本中用了一个比较繁琐的过程过滤路径,仅供学习之用:))。&&& 同时,也不会要再为获取不到物理路径而感到奇怪了,如果你真的那么好奇,不妨请 帮忙吧,我想这对大多数都不是什么难事了。&起先我在本机很容易就获取了完整的路径,不过经过几位朋友的提示,发现的时候还是会有问题,看来这确实是件难事了,不过这本身也就是浏览器安全性的体现,关于非要从客户端获取完整路径的问题我就不钻牛角尖了:)&&& ps:这位朋友说网上找了一圈都没有找到说是浏览器原因的,特此记录一下,希望对更多的人有所帮助。搜索此文相关文章: Forms下面FileUpload控件获取FileName的一个注意点此文来自: 马开东博客
网址: 站长QQ
关于WebForms下面FileUpload控件获取FileName的一个注意点_博客园相关文章
博客园_总排行榜
博客园_最新
博客园_月排行榜
博客园_周排行榜
博客园_日排行榜}

我要回帖

更多关于 获取classpath路径 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信