Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Странный трабл при работе с файлами 
:(
    Опции темы
suvor
Дата 4.8.2006, 21:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 4.8.2006

Репутация: нет
Всего: нет



Наступил на весьма странный трабл! Пишу

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 больше длины текста!!!  А при работе с менее длинными текстами все ОК! И непонятно джаже как выкручиваться!
PM MAIL   Вверх
CompWorm
Дата 4.8.2006, 22:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Допеределыватель
***


Профиль
Группа: Участник Клуба
Сообщений: 1689
Регистрация: 6.12.2004
Где: /

Репутация: нет
Всего: 31



lent = FileLen(fn)-1  smile 


--------------------
PM MAIL   Вверх
BUGOR
Дата 5.8.2006, 07:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 325
Регистрация: 12.3.2006

Репутация: 3
Всего: 16



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

Код

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



--------------------
Живу недоумевая, всё время хочу понять...
http://hunger.ru 
PM MAIL WWW ICQ   Вверх
mihanik
Дата 5.8.2006, 08:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


-=Белый Медведь=-
****


Профиль
Группа: Комодератор
Сообщений: 4054
Регистрация: 24.4.2006
Где: г. Тверь

Репутация: 11
Всего: 109



А я уж совсем по-японски делаю...  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



--------------------
Программистами не рождаются, - это родовая травма...
user posted imageuser posted image
PM MAIL WWW ICQ   Вверх
xkodex
Дата 20.8.2006, 05:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 30.4.2005

Репутация: нет
Всего: нет



Цитата

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

По-японски не то слово smile 
Зачем столько всего???
PM MAIL WWW   Вверх
mihanik
Дата 20.8.2006, 06:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


-=Белый Медведь=-
****


Профиль
Группа: Комодератор
Сообщений: 4054
Регистрация: 24.4.2006
Где: г. Тверь

Репутация: 11
Всего: 109



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


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


--------------------
Программистами не рождаются, - это родовая травма...
user posted imageuser posted image
PM MAIL WWW ICQ   Вверх
Тутанхамец
Дата 20.8.2006, 08:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 612
Регистрация: 10.10.2005
Где: в пирамидЕ!

Репутация: 4
Всего: 6



У меня такая беда была, когда в файле был символ нуля. 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


В общем, вижу два выхода: либо как-то исключить из файла нулевой символ, либо читать его не в строку. 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "VB6"
Akina

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по VB обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • Используйте теги [code=vb][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB6 | Следующая тема »


 




[ Время генерации скрипта: 0.0493 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.