Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Обрезать файл. Добавлено: 27.03.05 07:11  

Автор вопроса:  CyRax  | Web-сайт: basicproduction.nm.ru | ICQ: 204447456 
 Что то я вчера так и не нашёл подходящей функции в 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-сайт: basicproduction.nm.ru
 Профиль | | #1
Добавлено: 27.03.05 07:13
Что то код мелковат. В Опере не разобрать слов.

Ответить

Номер ответа: 2
Автор ответа:
 Neco



ICQ: 247906854 

Вопросов: 133
Ответов: 882
 Web-сайт: neco.pisem.net
 Профиль | | #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
    ;DeleteTags = True
Else
    ;DeleteTags = 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-сайт: basicproduction.nm.ru
 Профиль | | #5
Добавлено: 01.04.05 16:18
Да не, я просто думал платформонезависимую сделать - только средствами языка. Да вот не смог найти команды, задающей конец файла.

Ответить

Номер ответа: 6
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #6
Добавлено: 01.04.05 16:23
Neco,
 Для базы данных по моему такой способ слишком громоздкий :)
 Хотя я дефрагментацию почти так и делаю. Гружу всю базу в байтовый массив, обрабатываю в памяти и скидываю обратно. Но то что я скидываю, как правило получается меньше того что есть, а PUT не обрезает автоматически.

Ответить

Номер ответа: 7
Автор ответа:
 Neco



ICQ: 247906854 

Вопросов: 133
Ответов: 882
 Web-сайт: neco.pisem.net
 Профиль | | #7
Добавлено: 02.04.05 04:14
По-моему даже Access таким же макаром работает. Пока работаешь с базой, она только лишь растёт, типа как довёл её до 20 мегов, потом очистил, а она всё ещё 20 мегов, хотя в ней ничего нет. Надо "сжимать", чтобы уменьшить. И то, что для этого даже команда специальная есть ("сжать базу" - т.е. эта целая операция, не просто так) наводит на мысль, что задавать конец файла попросту нельзя...

Ответить

Номер ответа: 8
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #8
Добавлено: 03.04.05 12:36
Ну так дефрагментация - это и есть сжатие :).
А то что задавать конец файла попросту нельзя, так это похоже только в VB6.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам