2009-10-19 3 views
3

Использование VB6Ошибка при чтении пустого текстового файла?

Когда я Чтение пустой текстовый файл, показывая ошибку как входной Past конец файла

кода.

Dim fso As FileSystemObject 
Dim TS As TextStream 
Dim TempS As String 
Dim Final As String 
Set fso = New FileSystemObject 
Set TS = fso.OpenTextFile(txtSourceDatabaseFile & "\" & FileName, ForReading) 
Final = TS.ReadAll 
Do Until TS.AtEndOfStream 
    TempS = TS.ReadLine 
    Final = Final & TempS & vbCrLf 
Loop 
TS.Close 

Как проверить, пуст или нет текстовый файл? Если пустое не нужно читать содержимое, то оно должно читать содержимое.

Нужна VB6 код Помощь

+0

В какой строке он падает? –

+0

Также стоит проверить наличие файла перед тем, как его открыть. Я думаю, что его Dir (filename) = "", если он не существует. – Martin

ответ

8

Вы делаете это:

Final = TS.ReadAll 
Do Until TS.AtEndOfStream 
    TempS = TS.ReadLine 
    Final = Final & TempS & vbCrLf 
Loop 

Перед тем, как позвонить в ReadAll, вы должны проверить AtEndOfStream, что-то вроде:

If TS.AtEndOfStream Then 
    Final = "" 
Else 
    Final = TS.ReadAll 
    Do Until TS.AtEndOfStream 
     TempS = TS.ReadLine 
     Final = Final & TempS & vbCrLf 
    Loop 
End If 

Обратите внимание, что у вас есть логическая ошибка: ReadAll прочитает весь файл в памяти. Поэтому впоследствии вызов ReadLine ничего не вернет. Либо используйте ReadAll, либо проанализируйте ввод с помощью строковых манипуляций, либо просто вызовите ReadLine. Не используйте оба.

0

Если вы просто хотите, чтобы проверить размер файла, вы можете попросить .Size собственности напрямую, без открытия этого файла:

set folder = fso.GetFolder(path) 
for each file in folder.Files 
    Response.Write file.Name & ": " & file.Size & "<br>" 
Next 
2

Если вы просто хотите прочитать текстовый файл в строке, Stefan answered that on one of your questions в июле. Ответ все тот же.

strFilename = "C:\1.txt" 
iFile = FreeFile 
Open strFilename For Input As #iFile 
strTheData = StrConv(InputB(LOF(iFile), iFile), vbUnicode) 
Close #iFile 

Если файл пуст (нуль-длина), strTheData будет содержать пустую строку "". В качестве альтернативы вы можете проверить длину файла с помощью FileLen.

If FileLen("C:\1.txt") = 0 Then MsgBox "Empty file" 

Я рекомендую избегать FileSystemObject: это иногда не хватает на машинах пользователей - возможно, потому, что более ревностных ИТ-отделов боятся вирусов? EDIT: на самом деле я только что слышал от своих коллег о проблеме пользователя на прошлой неделе, которая оказалась проблемой FileSystemObject.

Смежные вопросы