【问题标题】:VB.Net File.Exists() Returns True but Excel cannot OpenVB.Net File.Exists() 返回 True 但 Excel 无法打开
【发布时间】:2012-12-18 14:14:06
【问题描述】:

我使用File.Exists(filePath) 检查文件是否存在。然后我尝试使用Excel.Workbooks.OpenText(filePath) 在 Excel 中打开文件。但 Excel 抱怨该文件不存在。什么鬼?

上下文是我正在使用另一个应用程序来处理给定文件并生成一个 .out 文件,然后我将其转换为 Excel 工作簿。

'' At this point, filePath is a .txt file.
Dim args As String = String.Format("""{0}""", filePath)
...
Dim exe As String = Config.ExtractEXE

Dim i As New ProcessStartInfo(exe)
i.Arguments = args

Dim p As Process = Process.Start(i)
p.WaitForExit()
...
'' filePath now becomes the .out file.
'' Then eventually, I get around to checking:
'If Not File.Exists(filePath) Then
'   MsgBox("Please ensure...")
'   Exit Sub
'End If
'' In response to an answer, I no longer check for the existence of the file, but
'' instead try to open the file.

Private Function fileIsReady(filePath As String) As Boolean
  Try
    Using fs As FileStream = File.OpenRead(filePath)
      Return True
    End Using
  Catch
    Return False
  End Try
End Function

Do Until fileIsReady(filePath)
  '' Wait.
Loop

ExcelFile.Convert(filePath...)
'' Wherein I make the call to:
Excel.Workbooks.OpenText(filePath...)
'' Which fails because filePath can't be found.

是否存在延迟问题,例如 .Net 在其他应用程序可以访问文件之前识别文件的存在?我只是不明白为什么File.Exists() 可以告诉我文件在那里,然后 Excel 找不到它。

据我所知,唯一可能打开文件的应用程序是我调用来进行处理的应用程序。但是该应用程序应该在 p.WaitForExit() 完成时完成文件,对吧?

我不得不将此应用程序作为一个已知错误来部署,这真的很糟糕。用户有一个简单的解决方法;但仍然 - 这个错误不应该。希望你能帮忙。

【问题讨论】:

  • 当时文件是否被其他应用程序打开?例如。独立的 Excel?
  • @Trekstuff,请参阅我在问题中添加的评论以回应您的问题。谢谢!

标签: vb.net excel-2010


【解决方案1】:
  1. 文件是否存在并不是您能否打开它的唯一因素。您还需要查看文件系统权限和锁定。
  2. File.Exists 可能会欺骗您(如果您传递目录路径或发生任何错误,即使文件确实存在,它也会返回 false)
  3. 文件系统不稳定,即使在if (File.Exists(...)) 行和尝试在下一行打开文件之间的短暂时间内,情况也会发生变化。

总结:you should hardly ever use file.exists(). 几乎任何时候你都想这样做,只要尝试打开文件并确保你有一个好的异常处理程序。

【讨论】:

  • 哇。这是我第一次听说不依赖 File.Exists()。真可惜。但是我已经根据我在您的链接中阅读的内容对代码进行了更改。请参阅我的问题以了解更改。结果是一样的。 :(
  • 我认为你没有抓住重点。根本不要使用像 FileIsReady() 这样的函数。您需要将调用 excel 放在 try/catch 块中。
  • 啊。我懂了。你说得对——我确实没有抓住重点。关于为什么 Excel 无法打开那里的文件的任何想法?假设我将围绕 Excel 代码包装一个异常处理程序,它仍然会导致无法打开文件。所以我的错误仍然存​​在。我需要消灭那个虫子!
  • 可能之前的进程还没有完全释放,文件还是被锁住了。
  • 有趣。我添加了两层 Try...Catch 块:一层围绕对 Excel.Workbooks.OpenText() 的调用,在 Catch 块中我处理 Excel 并重新抛出异常;另一个在 ExcelFile.Convert() 周围,在 Catch 块中,我等待一秒钟,然后再次尝试调用 ExcelFile.Convert()。两个块都没有任何区别。我仍然收到 .Net 的未处理异常消息,告诉我在添加 Try...Catch 块之前它告诉我的相同内容。
猜你喜欢
  • 2013-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-10
  • 2016-12-05
  • 1970-01-01
相关资源
最近更新 更多