2016-03-14 3 views
-2

я следующий код спинета:GetFileInfo() и LastWriteTime() дает ошибку: Индекс находился вне границ массива

UPDATE будет существовать

(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() не дает ошибку: «Индекс находился вне границ массива»

Я пытался много вещей, но не повезло ... :(

решаемые

Проблема была решена, ответил отдельно!

+1

Я предполагаю, что вы не получите исключение в обеих строках, так где именно оно поднято? Опубликуйте стек. –

+0

Когда я добавляю эти две строки, PdfFileInfo = FileIO.FileSystem.GetFileInfo (strPdfFileName) PdfModificationTime = PdfFileInfo.LastWriteTime() это дает мне исключение –

+0

Я не могу получить stacktrace по некоторым причинам (так что я застрял на самом деле, я знаю это ошибка времени выполнения), может ли GetFileInfo() возвращать значение null, даже если файл существует? –

ответ

0

Два важных момента здесь ..

  1. возможность ошибки в тех строках, которые я упомянул в вопросе

  2. ошибки: Индекс находился вне границ массива

Позволяет рассказать о 1-м:


Многие говорили, что ошибка на этих строках не может быть возможной, и я думал, что при написании кода сначала, но получил ошибку, которая показывалась в журналах.

Затем я прочитал документацию о системная функцияGetFileInfo().

Что они говорят, эта функция дает информацию о файле, в системе которой «обналичен» в своей памяти, system does this cashing periodically.

Теперь просто подумайте, система просто обналичила информацию о файловой системе в своей памяти, теперь вы создали файл и что-то записали в файле и вызвали функцию GetFileInfo().

Видел проблему? См., Когда вы вызываете функцию GetFileInfo(), в системе нет даже файла, обналиченного в памяти. Таким образом, мы получаем здесь, и когда вы пытаетесь получить LastWriteTime() нулевого объекта, здесь система выдает исключение.

Решение: Я поставил пустой чек, используя в то время как петля на объекте FILEINFO, что в коде PdfFileInfo (да и эта проблема была протестирована и решена .... :))


сейчас talk about 2nd:

Код, указанный в вопросе, не был в блоке try, поэтому любое вызванное этим функциональным блоком исключение было получено в вызывающей функции.Здесь вызывающая функция разрешила это исключение по-своему и выбрала исключение «Индекс был за пределами массива», который был релевантен для функции вызова, но не отразил фактическое исключение, вызванное GetFileInfo().

Решение: поместить этот блок кода в примерочных поймать блок

Спасибо за все комментарии и обсуждения ... :)!