Укорачивание файла с произвольным доступом

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

Укорачивание файла с произвольным доступом

Сообщение _ArArA_ » 24.09.2003 (Ср) 21:32

Как "урезать" сабж, чтоб удалить последние записи?

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

Сообщение GSerg » 25.09.2003 (Чт) 9:10

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

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 25.09.2003 (Чт) 9:39

Прочитать первые, удалить файл, кинуть прочитанное в новый файл с тем же именем.
А если файл на 500 мегабайт? Я, столкнулся с этой проблеммой - и режил через ж.. - написал на Delphi DLL, с такой процедурой, вызывал ее из бейсика. Работает мгновенно. Хотя наверняка существует такая API, только негде и некогда было искать.

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 25.09.2003 (Чт) 16:30

А если так:

Смотрим полный размер файла через

Public Declare Function GetFileSize Lib "kernel32" Alias "GetFileSize" (ByVal hFile As Long, lpFileSizeHigh As Long) As Long

Затем открываем файл бинарно и удаляем байты после последнего нужного (записываем в них ноль)... Так ведь размер файла урезается, правильно?

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 25.09.2003 (Чт) 16:59

Размер не урезается.

Хой
Не математик
Не математик
 
Сообщения: 541
Зарегистрирован: 26.08.2002 (Пн) 0:21
Откуда: Россия

Сообщение Хой » 25.09.2003 (Чт) 23:39

Amed писал(а):нужного (записываем в них ноль)... Так ведь размер файла урезается, правильно?

Ясен пень, не урезается!
--------------
Затем открываем файл бинарно и удаляем байты после последнего нужного (записываем в них ноль)...

Помнится так работал всеми любимый Win95.CIH (никому, случайно, исходник не нужен?), тока он в те байты каторые "ноль" прописывал себя......ну а потом стирал Flash-память...и ломал винчестер.... :-)
*censored*

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 26.09.2003 (Пт) 4:40

Ну в общем всё ясно - я тупой ньюбЪ... :P

_ArArA_
Начинающий
Начинающий
 
Сообщения: 2
Зарегистрирован: 24.09.2003 (Ср) 21:28

Сообщение _ArArA_ » 26.09.2003 (Пт) 19:08

А как все-таки урезать?

Dmitriy2003
Постоялец
Постоялец
 
Сообщения: 690
Зарегистрирован: 27.05.2003 (Вт) 22:47
Откуда: Deutschland

Сообщение Dmitriy2003 » 27.09.2003 (Сб) 23:34

Вот че отцы советуют :D
-------------------------------------------------------------
Private Const GENERIC_WRITE = &H40000000
Private Const FILE_ATTRIBUTE_NORMAL = &H80
Private Const OPEN_EXISTING = 3
'
Private Const FILE_BEGIN = 0
Private Const FILE_CURRENT = 1
Private Const FILE_END = 2
'
Private Type SECURITY_ATTRIBUTES
nLength As Long
lpSecurityDescriptor As Long
bInheritHandle As Long
End Type
'
Private Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" ( _
ByVal lpFileName As String, _
ByVal dwDesiredAccess As Long, _
ByVal dwShareMode As Long, _
ByRef lpSecurityAttributes As SECURITY_ATTRIBUTES, _
ByVal dwCreationDisposition As Long, _
ByVal dwFlagsAndAttributes As Long, _
ByVal hTemplateFile As Long) As Long
'
Private Declare Function SetFilePointer Lib "kernel32" ( _
ByVal hFile As Long, _
ByVal lDistanceToMove As Long, _
lpDistanceToMoveHigh As Long, _
ByVal dwMoveMethod As Long) As Long
'
Private Declare Function SetEndOfFile Lib "kernel32" (ByVal hFile As Long) As Long

Удачи......
Dmitrich


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

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

Сейчас этот форум просматривают: SemrushBot и гости: 164

    TopList