Работа с файлом

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Работа с файлом

Сообщение MIT » 14.11.2006 (Вт) 17:38

Подскажите пожалуйста как записывать или удалять определеноое кол-во байт в середине бинарного файла?
Способ с перезаписью не катит - файл больше гига
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 14.11.2006 (Вт) 17:42

Get/Put/API SetEndOfFile
Lasciate ogni speranza, voi ch'entrate.

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Сообщение MIT » 14.11.2006 (Вт) 20:28

Может я чегото не знаю, но Put перезаписывает данные, мне надо следующее:
Есть файл (например 1000000 байт), надо добавить между 72 и 73 байтами ещё 32
(т.е. было
ї‡l?”фЕ>ї~*:1Ъ:kї9ьяї­ия8›А
стало
ї‡l?”фЕ>ї~*:1ЪЕѕ‰l?`я8›А:Bтѕ9ьяїо:kї9ьяї­ия8›А)
Или надо удалить с 216 по 248 байт
Было
ї‡l?”фЕ>ї~*:1Ъ:kї9ьяї­ия8›А
стало
ї‡l?”›А
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 14.11.2006 (Вт) 22:40

Get/Put/API SetEndOfFile + Brains

Записывать не обязательно в ту же позицию, с которой считывал.
Lasciate ogni speranza, voi ch'entrate.

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Сообщение MIT » 14.11.2006 (Вт) 23:08

А можно поподробнее?
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 15.11.2006 (Ср) 8:23

Куда уж подробнее то?
Если надо добавить, то считываешь при помощи Get байты с заданной позиции до конца файла, при помощи Put пишешь их в нужную позицию. вставляемые байты опять при помощи Put записываешь в нужное место файла. Все.

Если надо удалить, то считываешь байты с нужной позиции при помощи Get, записываешь в новую позицию (естественно Put) и при помощи SetEndOfFile задаешь новый уменьшенный размер файла. Все!
Весь мир матрица, а мы в нем потоки байтов!

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Сообщение MIT » 15.11.2006 (Ср) 14:21

!Viper!
А ты представляешь сколько требуется оперативки, чтобы
считываешь при помощи Get байты с заданной позиции до конца файла

размером больше гигабайта? :evil:
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 15.11.2006 (Ср) 14:24

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

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Сообщение MIT » 15.11.2006 (Ср) 16:11

GSerg
Даже если разбивать на части идет сильная загрузка процессора и очень сильно снижается быстродействие.
Есть ли APIшка какая-нибудь для записи\удаления байт?
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 15.11.2006 (Ср) 16:18

ReadFile и WriteFile, MIT.
Если ты удаляешь 1 первый байт из 10-гигового файла, ты должен будешь перелопатить все 10 гигов. Да, всё так.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Lunatic
Обычный пользователь
Обычный пользователь
 
Сообщения: 98
Зарегистрирован: 04.03.2008 (Вт) 17:33

Re: Работа с файлом

Сообщение Lunatic » 07.01.2009 (Ср) 12:08

Ну а если мне нужно просто считать всего лишь пару байт с огромного файла ~8 гиг.
через обычный Seek или SetFilePointer, не получаеться, так как они не превышают 2,147,483,647 байт. я уже понял что прийдётся дурить комп и менять ему границы начала и конца файла чтобы он мог корректно считать данные. SetEndOfFile - для этого используеться? Если не трудно, можно маленький примерчик. Буду очень признателен

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: Работа с файлом

Сообщение MIT » 07.01.2009 (Ср) 18:56

Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

Lunatic
Обычный пользователь
Обычный пользователь
 
Сообщения: 98
Зарегистрирован: 04.03.2008 (Вт) 17:33

Re: Работа с файлом

Сообщение Lunatic » 07.01.2009 (Ср) 21:39

Очень похоже. Выложенный там пример не работает. Но ничего. Буду разбираться и дорабатывать


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 44

    TopList