【问题标题】:C# results FALSE at `File.Exists` even if the file EXISTS即使文件存在,C# 在 `File.Exists` 处结果为 FALSE
【发布时间】:2014-02-27 22:34:00
【问题描述】:

正如标题所说,我不知道我的代码有什么问题,但 if (File.Exists) 即使文件在那里也会给出否定结果。

下面是我的代码

if (File.Exists(ZFileConfig.FileName.Replace(".xml", "_abc.xml")))

这里,ZFileConfig.FileNameE:\\Application\\Application\\bin\\Debug\\resources\\FirstFile.xml

令人惊讶的是,ZFileConfig.FileName.Replace(".xml", "_abc.xml") 给了我E:\\Application\\Application\\bin\\Debug\\resources\\FirstFile_abc.xml,这正是我们所需要的。 EVENTHOUGH IF 未能返回 TRUE。

【问题讨论】:

  • 所以你是说File.Exists 说文件不存在,即使它存在?您确定文件“FirstFile_abs.xml”存在吗?能发个截图吗?
  • ZFileConfig.FileName.Replace()的返回值是多少?从那里开始。您可能会对实际返回的内容做出假设。
  • 您的应用程序是否有权访问该目录?
  • 无论如何你都不应该使用File.Exists。即使它现在返回 true,文件也可能在您打开之前被删除。只需尝试打开并处理异常。

标签: c# .net winforms


【解决方案1】:

看起来您的文件实际上名为 abc_RotateFlip.xml.xml

我无法想象为什么任何程序员会允许隐藏文件扩展名,但您的 Excel 文件显示它们确实是隐藏的。把它关掉!选择了解您的计算机内部发生了什么!

您还可以使用此注册表脚本来更改该设置;

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced]
"HideFileExt"=dword:00000000

【讨论】:

  • 我也这么认为。但我想问你一件事。这里.xml 文件是由 DataSet.WriteToXml() 生成的,其中 WriteToXml() 是 UDF,用于生成.xml 文件。我正在制作两个文件dsLabelFileConfig.WriteXml(info.Directory + @"\" + info.Name + ".xml");dsRotateFlip.WriteXml(info.Name.Replace(".xml" , "_RotateFlip.xml"));。但首先是制作精良。为什么第二个问题。?
  • @DhavalR:如果替换正在做某事,那么info.Name 已经以.xml 结束。然后info.Name + ".xml".xml.xml 结束
  • dsLabelFileConfig 很好。但是dsRotateFlip 出了问题。
  • @DhavalR:我不知道,因为我没有你的所有代码。可能在WriteXML 中添加了另一个.xml。也许您或您的同事在资源管理器中看到了最后没有 .xml 的文件,因为它被隐藏了,并添加了它。当然,您可以通过文件创建进行调试,看看它是否使用了错误的名称。
【解决方案2】:

请与FileInfo 联系:

FileInfo fi = new FileInfo(@"_abc.xml");
bool isExists = fi.Exists;

Generally 如果您对文件执行单个操作,请使用 File 类。如果您对同一个文件执行多个操作,请使用 FileInfo。

这样做的原因是访问文件时进行了安全检查。当您创建 FileInfo 的实例时,只执行一次检查。但是,每次使用静态 File 方法时都会执行检查。

【讨论】:

  • +1 好电话。当遇到看似奇怪的行为时,澄清代码也是一种很好的做法,其中每个组成操作都是单独的代码行并分配给临时变量。它变得冗长,但允许您单独调试每个调用,而不是一次将两个或多个调用折叠成一行代码。
  • 嗯,你能解释一下吗? “_abc.xml”的检查如何解决他的问题?为什么fi.ExistFile.Exists 更好?
  • @Shahrooz jefri:也试过了。但还是false
  • @ShahroozJefriㇱ 谢谢,但是“_abc.xml”部分呢?他的文件应该是“somethingold_abc.xml”
  • 我尝试了使用FileInfoFile Class 的两种方式。但是发生了什么事。?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-08-16
  • 2016-09-24
  • 2010-10-29
  • 2012-10-22
  • 1970-01-01
  • 2019-12-30
  • 2011-07-23
相关资源
最近更新 更多