在利用Html中的File控件上传文件时,如何获得你上传的文件的路径?北大青鸟的视频中告诉我们用:
File1.PostedFile.FileName
可是在断点调试中,我就发现了问题。
在火狐浏览器和IETester中,都只显示文件名,而不显示文件的完整路径,获得的FileName也只是文件名。比如我选择的图片的完整路径是"E:\提高班课程实践篇(我)\images\niunanlogo.jpg",但是浏览器中显示的是“niunanlogo.jpg” ,而且调试中显示的FileName也是“niunanlogo.jpg”,虽说这样挺方便的,不用我们再像视频中说的那样,去专门截取这部分字符串(因为视频中显示的是完整路径,需要截取出文件名。)但是,这是为什么呢?如果我们哪天需要完整的文件路径怎么办?哈哈,这些问题,早就有人解决过了,这里我就借鉴一下:
对于IE或IETester,我们找到:选项-Internet属性-安全-自定义级别,如图所示:
将“文件上载到服务器时包含本地目录路径”一项设成启动,如图:
这样就能显示出完整路径了。
对于FireFox也有解决办法,有兴趣的可以自己查一查啊!
解决了上述问题,又产生了新的疑惑,这个时候断点调试发现我的程序(VS2010 C#)中的FileName显示为:
"E:\\提高班课程实践篇(我)\\images\\niunanlogo.jpg"而视频中显示的为:
@"E:\提高班课程实践篇(我)\images\niunanlogo.jpg"这又是怎么回事儿哩?
我们先不着急解答上述问题,先跟我一起想象一下下面的情景:
如果你想在Label中显示一句话,如下:
与"take"相关的英语短语很多
你在程序中怎么实现呢?
如果在程序中你直接写:
Label1.Text = "与"take"相关的英语短语很多";
这样是不行的。
因为一般情况下:
""是用来表示它括起来的内容是字符串的。
可是我们现在只想让它表示一个双引号怎么办?
这时候就需要转义字符了,大家一定不陌生,一个“\”功能无比强大,它能“强迫”别的字符做出改变。
然后我们可以这样写:
Label1.Text = "与\"take\"相关的英语短语很多";
然后一点问题都没有哦!
现在,假入我们想让Label中显示:
E:\提高班课程实践篇(我)\images\niunanlogo.jpg
那么我们怎么写呢?
如果我们在程序中写成:
Label1.Text= "E:\提高班课程实践篇(我)\images\niunanlogo.jpg";
会提示错误:“无法识别的转义序列”
也就是说默认情况下,\ 表示转义字符,但是我们想让它仅表示一个反斜杠,那么我们就这样写:
Label1.Text= "E:\\提高班课程实践篇(我)\\images\\niunanlogo.jpg";
之后,我们就找出规律,如果我们想改变某个字符的原本意义,就用转义字符(\)+你要改变意义的字符就OK了。如果我们相用n表示换行,那么就写成\n。
大家也看到了,如果在一个路径字符串中,有多个\,那么我就得额外多写同样个数的\,有没有简便的办法呢?
当然有了,写成如下形式:
Label1.Text = @"E:\提高班课程实践篇(我)\images\niunanlogo.jpg";
我们知道在默认情况下,\是被看做转义字符的,但是在前面加上@之后,它后面的字符串中的\就会被都当做反斜杠处理,不把它看做转义字符了。
所以,现在我们来看看为什么视频中和我的VS2010显示的不一样呢?其实它们是一回事,只是是两种写法,目的都是让\表示为反斜杠。所以它们两个是等价的。
总结:
这篇文章主要是通过我在实践当中遇到的问题,讲了讲如何用Html的File控件显示完整文件路径以及转义字符的基本知识,内容很简单,但是解决问题的过程很精彩!
原文地址:http://blog.csdn.net/u010924834/article/details/39181765