Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB6 > Странный трабл при работе с файлами


Автор: suvor 4.8.2006, 21:43
Наступил на весьма странный трабл! Пишу

Open fn For Output As #1: Print #1, txt: Close:
Open fn For Input As #1: lent = FileLen(fn): txt = Input(lent, #1): Close:

где txt -большой текст (1 622 474 символов) и получаю ошибку  "Input past end of file"  т.к. длина файла оказывается на 1 больше длины текста!!!  А при работе с менее длинными текстами все ОК! И непонятно джаже как выкручиваться!

Автор: CompWorm 4.8.2006, 22:32
lent = FileLen(fn)-1  smile 

Автор: BUGOR 5.8.2006, 07:23
Используй в таких случаях функцию LOF(Len Of File):

Код

Open fn For Input As #1
txt = Input(LOF(1), #1) 
Close #1

Автор: mihanik 5.8.2006, 08:09
А я уж совсем по-японски делаю...  smile 

Код

Sub ReadFile()
Dim fso As Object
Dim f As Object
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set f = fso.OpenTextFile(strFileName, 1, True)
   strStrings = f.ReadAll()
   f.Close
End Sub

Автор: xkodex 20.8.2006, 05:16
Цитата

А я уж совсем по-японски делаю...   

По-японски не то слово smile 
Зачем столько всего???

Автор: mihanik 20.8.2006, 06:44
xkodex, 
Цитата(xkodex @  20.8.2006,  05:16 Найти цитируемый пост)
Зачем столько всего??? 


Из лихости!  smile  smile  smile 

Автор: Тутанхамец 20.8.2006, 08:48
У меня такая беда была, когда в файле был символ нуля. Chr(0), то есть. Такой файл не хочет лезть в строку.

Сравни как работают два кода.

Тут должно быть всё в порядке:

Код

Private Sub Command1_Click()
Dim s As String
Open "c:\qq.qq" For Output As #1
Print #1, "qqq"
Close #1

Open "c:\qq.qq" For Input As #1
s = Input(LOF(1), 1)
Close #1

MsgBox s
End Sub



Здесь должен лезть "input past end of file"

Код


Private Sub Command2_Click()
Dim s As String
Open "c:\qq.qq" For Output As #1
Print #1, "qqq" + Chr(0) + "qq" '!!!!
Close #1

Open "c:\qq.qq" For Input As #1
s = Input(LOF(1), 1)
Close #1

MsgBox s
End Sub



Добавлено @ 08:53 
А еще интересно, что способ Миханика (через FSO) ошибки не вызывает, но так как chr(0) означает конец строки, то часть файла ПОСЛЕ нулевого символа в прочитанной строке отсутствует. Вот посмотри:

Код

Private Sub Command3_Click()
Dim s As String
Open "c:\qq.qq" For Output As #1
Print #1, "qqq" + Chr(0) + "wwww"
Close #1

Dim fso As Object
Dim f As Object
Dim strStrings As String
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set f = fso.OpenTextFile("c:\qq.qq", 1, True)
   strStrings = f.ReadAll()
   f.Close
   MsgBox strStrings 'только "qq", без "wwww"
End Sub


В общем, вижу два выхода: либо как-то исключить из файла нулевой символ, либо читать его не в строку. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)