Страница: 1 |
Страница: 1 |
Вопрос: Обрезать файл.
Добавлено: 27.03.05 07:11
Автор вопроса: CyRax | Web-сайт:
Что то я вчера так и не нашёл подходящей функции в VB. Мне нужна функция, задающая конец файла (что то типа PB-шного SETEOF).
Пока делаю через API, но хотелось бы стандартными средствами:
Dim lngHandle As Long
lngHandle = CreateFile(DatabaseName, GENERIC_WRITE, FILE_SHARE_READ Or FILE_SHARE_WRITE, ByVal 0&, OPEN_EXISTING, 0, 0)
If lngHandle <> 0 Then
SetFilePointer lngHandle, Seek(hFileDBF), 0, FILE_BEGIN
SetEndOfFile lngHandle
CloseHandle lngHandle
Else
MsgBox "Cannot set EOF" & vbCr & "CreateFile failed!", 16, "BPDBF"
End If
Ответы
Всего ответов: 8
Номер ответа: 1
Автор ответа:
CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #1
Добавлено: 27.03.05 07:13
Что то код мелковат. В Опере не разобрать слов.
Номер ответа: 2
Автор ответа:
Neco
ICQ: 247906854
Вопросов: 133
Ответов: 882
Web-сайт:
Профиль | | #2
Добавлено: 31.03.05 02:45
О! Своим вопросом ты ответил на мой давнишний вопрос!
Я вот так вот (стадартным васей) удалял тэги:
Public Function DeleteTags(strFile As String) As Boolean
Dim strTmp As String, chkStr As String
Dim lngAttrs As Long
lngAttrs = GetAttr(strFile)
SetAttr strFile, vbNormal
Open strFile For Binary Access Read Lock Write As #1
strTmp = Space$(LOF(1) - 127)
Get #1, 1, strTmp
Seek #1, LOF(1) - 127
chkStr = Space$(127)
Get #1, , chkStr
Close #1
If Left$(chkStr, 3) = "TAG" Then
Open strFile For Output As #1
Print #1, strTmp;
Close #1
 eleteTags = True
Else
 eleteTags = False
End If
SetAttr strFile, lngAttrs
End Function
Дебильно? Согласен, но надо, так надо...
Номер ответа: 3
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #3
Добавлено: 31.03.05 09:50
А что GetLastError выдает?
Номер ответа: 4
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #4
Добавлено: 31.03.05 09:53
Пардон, вопрос прочитал неполностью. Думал у тебя этот код не работает...
Номер ответа: 5
Автор ответа:
CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #5
Добавлено: 01.04.05 16:18
Да не, я просто думал платформонезависимую сделать - только средствами языка. Да вот не смог найти команды, задающей конец файла.
Номер ответа: 6
Автор ответа:
CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #6
Добавлено: 01.04.05 16:23
Neco,
Для базы данных по моему такой способ слишком громоздкий
Хотя я дефрагментацию почти так и делаю. Гружу всю базу в байтовый массив, обрабатываю в памяти и скидываю обратно. Но то что я скидываю, как правило получается меньше того что есть, а PUT не обрезает автоматически.
Номер ответа: 7
Автор ответа:
Neco
ICQ: 247906854
Вопросов: 133
Ответов: 882
Web-сайт:
Профиль | | #7
Добавлено: 02.04.05 04:14
По-моему даже Access таким же макаром работает. Пока работаешь с базой, она только лишь растёт, типа как довёл её до 20 мегов, потом очистил, а она всё ещё 20 мегов, хотя в ней ничего нет. Надо "сжимать", чтобы уменьшить. И то, что для этого даже команда специальная есть ("сжать базу" - т.е. эта целая операция, не просто так) наводит на мысль, что задавать конец файла попросту нельзя...
Номер ответа: 8
Автор ответа:
CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #8
Добавлено: 03.04.05 12:36
Ну так дефрагментация - это и есть сжатие .
А то что задавать конец файла попросту нельзя, так это похоже только в VB6.