【问题标题】:GetFileInfo() and LastWriteTime() is giving an error : Index was outside the bounds of the arrayGetFileInfo() 和 LastWriteTime() 给出错误:索引超出了数组的范围
【发布时间】:2016-03-14 08:22:52
【问题描述】:

我有以下代码spinet:

更新

(code above this code is creation of pdf file)
Dim PdfFileInfo As FileInfo
Dim PdfModificationTime As Date
If (FileIO.FileSystem.FileExists(strPdfFileName)) Then
   PdfFileInfo = FileIO.FileSystem.GetFileInfo(strPdfFileName)
   PdfModificationTime = PdfFileInfo.LastWriteTime()
End If

文件存在,但是当我使用GetFileInfo()LastWriteTime() 时,它会给出一个错误:“索引超出了数组的范围”

我尝试了很多东西,但没有运气... :(

已解决

问题已解决,单独回答!

【问题讨论】:

  • 我假设您在两行都没有遇到异常,那么它到底是在哪里引发的?发布堆栈跟踪。
  • 当我添加这两行时,PdfFileInfo = FileIO.FileSystem.GetFileInfo(strPdfFileName) PdfModificationTime = PdfFileInfo.LastWriteTime() 它给了我一个例外
  • 由于某些原因我无法获取堆栈跟踪(所以我实际上被卡住了,我知道这是运行时错误),即使文件存在,GetFileInfo() 是否可以返回 null?
  • 当对象为null 时,您不会得到IndexOutOfRangeException,而是NullReferenceException。如果您尝试在不存在的索引处访问列表或数组的项目,则会出现异常。所以喜欢这里:int[] ints={1};int second=ints[1];
  • 您发布的代码不会引发该异常。这里有一股腥味。为什么不能发布堆栈跟踪?如果你这样做,你将在五分钟内得到答案

标签: vb.net pdf indexoutofboundsexception last-modified


【解决方案1】:

这里有两个重点..

  1. 我在问题中提到的那些行可能出错

  2. 错误:索引超出数组范围

让我们谈谈第一个:


很多人说这些行的错误是不可能的,我一开始写代码的时候也是这么想的,但是在日志中显示了一个错误。

然后我阅读了有关系统功能 GetFileInfo()的文档。

正如他们所说,此函数提供有关系统在其内存中“兑现”的文件的信息,system does this cashing periodically

现在想想,系统只是将文件系统信息兑现到它的内存中,现在你已经创建了一个文件并在文件中写入了一些东西并调用了函数GetFileInfo()

看到问题了吗?看看当你调用一个函数GetFileInfo() 时,系统甚至没有一个文件对象在内存中兑现。所以我们在这里得到fileinfo object null,当你尝试获取空对象的LastWriteTime()时,这里系统抛出异常。

解决方案:我已经在代码中PdfFileInfo的fileInfo对象上使用while循环进行了空检查(是的,这个问题已经过测试并解决了......:))


现在谈谈第二个:

问题中引用的代码不在 try 块中,因此此函数块引发的任何异常都会在调用函数中收到。这里调用函数以自己的方式解决了这个异常,并抛出了一个异常“索引超出了数组的范围”,这与调用函数相关,但不反映GetFileInfo()抛出的实际异常。

解决方案:将此代码块放入try-catch块中

感谢所有 cmets 和讨论... :) !

【讨论】:

    猜你喜欢
    • 2013-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-18
    • 1970-01-01
    • 2014-03-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多