首页新闻找找看学习计划

c#奇葩问题

0
悬赏园豆:50 [已解决问题] 解决于 2016-03-10 11:56

if ( File.Exists(file_name_str) )
{
try
{
cfg_file = new FileStream(file_name_str, FileMode.Open);
}
catch (Exception e)
{
if (cfg_file != null)
cfg_file.Close();
ThrowReadFailedError(ref file_name_str, "open cookie file failed");
return false;
}

}

 

这段代码抛文件不存在异常...震精了,,求助

空里的主页 空里 | 初学一级 | 园豆:159
提问于:2016-03-09 20:22
< >
分享
最佳答案
0

https://msdn.microsoft.com/zh-cn/library/system.io.file.exists(v=vs.80).aspx

不应使用 Exists 方法来验证路径,此方法仅检查 path 中指定的文件是否存在。将无效路径传递到 Exists 将返回 false

请注意,在您调用 Exists 方法和对文件执行其他操作(如 Delete)之间,其他进程可能会对文件进行一些处理。建议的编程做法是在 try...catch 块中包装 Exists 方法和对文件采取的操作,如示例中所示。这有助于缩小潜在冲突的范围。Exists 方法只能帮助确保文件是可用的,但无法保证。

允许 path 参数指定相对或绝对路径信息。相对路径信息被解释为相对于当前工作目录。若要获取当前工作目录,请参见 GetCurrentDirectory

如果 path 描述一个目录,则此方法返回 false。在确定文件是否存在之前,从 path 参数中移除尾随空格。

收获园豆:20
刘宏玺 | 专家六级 |园豆:14004 | 2016-03-10 09:47

thank you。这文档让我熟悉了下File操作。

空里 | 园豆:159 (初学一级) | 2016-03-10 11:51
其他回答(7)
0

程序是否有足够权限读取文件?

收获园豆:10
c99 | 园豆:1838 (小虾三级) | 2016-03-09 21:32

不是这个问题。是大小写导致的,sd卡的文件系统和系统所使用的文件系统是不一样的(具体所使用的文件系统不详,未研究过文件系统)。

支持(0) 反对(0) 空里 | 园豆:159 (初学一级) | 2016-03-10 11:48

@空里: 这样子啊,也谢谢你啊。

支持(0) 反对(0) c99 | 园豆:1838 (小虾三级) | 2016-03-10 16:23
0

没进if块吧

收获园豆:5
jello chen | 园豆:7091 (大侠五级) | 2016-03-10 09:21
0

异常是哪句代码爆出来的?

收获园豆:5
幻天芒 | 园豆:36544 (高人七级) | 2016-03-10 09:53
0

文件路径出问题,估计没找到绝对路径!最好if 前面加一个路径是否有效判断

收获园豆:5
!雨后的天! | 园豆:239 (菜鸟二级) | 2016-03-10 09:54
0

按你的这个逻辑 无论文件怎么报错 抛出的异常都应该是这个啊

ThrowReadFailedError(ref file_name_str, "open cookie file failed");

收获园豆:5
小眼睛老鼠 | 园豆:2774 (老鸟四级) | 2016-03-10 10:30

这个报错提示语是后来我修改的。之前是在这里打印错误信息的,由于错误信息会打印每个玩家的路径,上传到服务器上的错误数太大,我就修改这个报错为统一报错了。

支持(0) 反对(0) 空里 | 园豆:159 (初学一级) | 2016-03-10 11:32

@空里: 然后还有就是你这段代码没加锁 

如果并发量很大 容易出问题

支持(0) 反对(0) 小眼睛老鼠 | 园豆:2774 (老鸟四级) | 2016-03-10 11:50
0

这个问题已经fixed。是我们登陆账号大小写在游戏登陆验证后发生了变化(随机的),File.Exist这个函数在android机器上是否区分大小写取决于所使用的文件系统。

空里 | 园豆:159 (初学一级) | 2016-03-10 11:56
0

微软的API都是精确测试过的,行为稍微有点不一样的,会详细说明。CLR中的代码质量也还是可以的。

能遇到API的BUG,恭喜自己中大奖了。

 

信息化建设 | 园豆:223 (菜鸟二级) | 2016-03-12 10:07
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册