Как очистить бинарный файл?

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

Как очистить бинарный файл?

Сообщение AndreyG_80 » 19.08.2006 (Сб) 4:00

у меня есть файл, который я открыл
Open f For Binary Access Write As #1

файл был не пустой, наново записал пол файла, а оставшуюся половину хочу удалить.

Как это сделать?

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 19.08.2006 (Сб) 5:49

Удалить файл перед записью?
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

AndreyG_80
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 169
Зарегистрирован: 10.03.2006 (Пт) 13:27

Сообщение AndreyG_80 » 19.08.2006 (Сб) 6:01

фай допустим имеет размер 400
я его открываю
Код: Выделить всё
Open sPath For Binary Access Write As #1

потом проверяю размер LOF(#1) - показывает 400
мне кажеться, что оно не должно его очищать, я же могу дописывать в файл какую-то инфу.

Может его открывать нужно как-то по другому?

AndreyG_80
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 169
Зарегистрирован: 10.03.2006 (Пт) 13:27

Сообщение AndreyG_80 » 19.08.2006 (Сб) 6:07

а на сколько быстро проходит удаление?

Код: Выделить всё
kill sPath
Open sPath For Binary Access Write As #1


мне кажеться, что оно не успеет его удалить

Ну да и ладно.
Я уже сделал. Я удаляю файл, и открываю временный файл для записи, а потом переиминовываю временный файл в такой как мне нужно.

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 19.08.2006 (Сб) 6:12

AndreyG_80 писал(а):мне кажеться, что оно не успеет его удалить


Не успеет? Это как?
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

AndreyG_80
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 169
Зарегистрирован: 10.03.2006 (Пт) 13:27

Сообщение AndreyG_80 » 19.08.2006 (Сб) 8:14

пока винт его будет удалять, он откроется

Debugger
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1667
Зарегистрирован: 17.06.2006 (Сб) 15:11

Сообщение Debugger » 19.08.2006 (Сб) 8:59

Если открывается удалённый фаёл (или блока инфы пока нету...) то он пустой...

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 19.08.2006 (Сб) 9:04

AndreyG_80 писал(а):пока винт его будет удалять, он откроется

Ерунда. Операторы программы выполняются по очереди, а не все сразу. Пока не завершит выполняться Kill, не начнёт выполняться следующий.

Квантовые компьютерщики, блин.
Изображение

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

Сообщение Viper » 19.08.2006 (Сб) 11:35

Можно еще утсановить длину файла в нужный размер, но если не ошибаюсь, встроенных средств в VB для этого нет. Только API-функциями SetEndOfFile, возможно в сочетании с SetFilePointer.
Весь мир матрица, а мы в нем потоки байтов!

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

Сообщение GSerg » 19.08.2006 (Сб) 15:29

tyomitch писал(а):Ерунда. Операторы программы выполняются по очереди, а не все сразу. Пока не завершит выполняться Kill, не начнёт выполняться следующий.

Квантовые компьютерщики, блин.

Ерунда, может, и ерунда, а у меня однажды в VBA такое было.
Kill + open упорно вызывал ошибку, пока не поставил искусственную задержку после kill. Долго думал.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

AndreyG_80
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 169
Зарегистрирован: 10.03.2006 (Пт) 13:27

Сообщение AndreyG_80 » 19.08.2006 (Сб) 15:44

а как же многопоточность винды. Разве удаление файла и выполнение программы происходит не в разных потоках?

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 19.08.2006 (Сб) 15:51

Не в разных.
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;


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

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

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

    TopList  
cron