精通
英语
和
开源
,
擅长
开发
与
培训
,
胸怀四海
第一信赖
最近换台新的机器,用了些新配置,把旧机器的开发环境移植过来后,在调试时,C#的一个方法执行失败。这个方法是File.Exits,它可以判断某个文件在不在硬盘上,传入的参数是绝对路径名。因为以前对代码测试过,觉得出现这样的问题真是莫名其妙!
打开MSDN找到对Exits的说明,说有可能权限有影响,就找了如下代码进行权限的处理。
FileIOPermission f = new FileIOPermission(FileIOPermissionAccess.AllAccess, sfile); f.Demand();
把如上代码加到方法里,问题依旧。又加如下形式:
[FileIOPermission(SecurityAction.Demand, All = @"D:\papersystem\upfile\1.docx")] public partial class Form1 : Form
还是不行。
接着想着是Win7的权限有影响,就想办法给进程提权。
加入清单文件manifest,加上requireAdministrator,还是不行。
修改项目属性里的ClickOnce,如下图:
问题依旧。没办法,就把示例代码放到旧机器上运行。旧机器上完全可以,代码判断没问题。
在新机器环境下,我把代码里的目录修改到机械硬盘所在的目录,新机器环境下也正常了。出问题的目录在固态硬盘的分区上,可能是Win7对固态硬盘的支持不好,也有可能是固态硬盘的权限要求高,也没有具体向下分析。
项目比较紧张时,最好不要换环境,会耽误时间。这个事故是换用固态硬盘导致File.Exits判断失败,是个血的教训。
后来仔细想到一个区别,旧机器资源管理器里显示文件名是不带扩展名,旧机器里测试的文件名正确,而新机器里测试文件名是多了个扩展名,比如1.docx在新机器里的实际文件名为1.docx.docx,正是因为扩展名问题才导致判断失败。和硬盘类型没关系。
为什么会反复,还是因为项目没有集中完成,心理假定其它模块是正确的,没有注意细节。血的教训。