Гость
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как правильно сохранить бинарный файл? / 7 сообщений из 7, страница 1 из 1
07.08.2020, 16:25
    #39987566
melihron
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно сохранить бинарный файл?
Добрый день, коллеги.
Не могу байт в байт сохранить файл.

при таком сохранении теряются первые 2 символа:
Код: vbnet
1.
2.
3.
  Open savePath For Binary Access Write As #1
  Put #1, , rs(0).Value
  Close #1


а при таком добавляет в конец 2 символа #0D #0A
Код: vbnet
1.
2.
3.
  Open savePath For Output As #2
  Print #2, rs(0).Value
  Close #2


Чё за хрень, как победить ?
Сохранить пытаюсь xlsx-файл размером в пару мегабайт, отданный процедурой на sql-сервере.
...
Рейтинг: 0 / 0
07.08.2020, 16:47
    #39987588
Прогер_самоучка
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно сохранить бинарный файл?
melihron
а при таком добавляет в конец 2 символа #0D #0A
Код: vbnet
1.
2.
3.
  Open savePath For Output As #2
  Print #2, rs(0).Value
  Close #2

ну таки управляющие символы :)
...
Рейтинг: 0 / 0
07.08.2020, 21:40
    #39987675
Swa111
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно сохранить бинарный файл?
melihron,

Код: vbnet
1.
2.
3.
4.
set ObjFSO = WScript.CreateObject("Scripting.FileSystemObject")
set f1 = ObjFSO.openTextFile("file.xlsx", 2, true)
f1.write xlsxContent
f1.close
...
Рейтинг: 0 / 0
08.08.2020, 03:41
    #39987713
ЦЦа
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно сохранить бинарный файл?
melihron,

хрень побеждаеЦЦа, как ни удивительно, через RTFM по Open Statement и Put Statement.
Примерный код:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
Public Sub ExportBLOB(ByVal Id As Long, Optional ByVal Path As String)
 Dim rs As DAO.Recordset
 Dim Buffer() As Byte
 Dim nFile As Integer
 Set rs = CurrentDb.OpenRecordset("T_BLOBs", DAO.dbOpenDynaset)
 rs.FindFirst "Id=" & Id
 If Not rs.NoMatch Then
    Path = Trim$(Path)
    If Len(Path) = 0 Then
       Path = Left$(CurrentDb.Name, InStrRev(CurrentDb.Name, "\"))
    ElseIf InStr("\:", Right$(Path, 1)) = 0 Then
       Path = Path & "\"
    End If
    Path = Path & rs("FileName")
    nFile = FreeFile()
    Open Path For Output Access Write Lock Write As #nFile 'обнуление размера
    Close #nFile                                           'файла
    Open Path For Binary Access Write Lock Write As #nFile
    Buffer = rs("BinData")
    Put #nFile, , Buffer
    Close #nFile
    Erase Buffer
 End If
 Set rs = Nothing
End Sub
...
Рейтинг: 0 / 0
08.08.2020, 07:02
    #39987715
aleks222
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно сохранить бинарный файл?
melihron
Добрый день, коллеги.
Не могу байт в байт сохранить файл.

при таком сохранении теряются первые 2 символа:
[src VB]
Open savePath For Binary Access Write As #1
Put #1, , rs(0).Value
Close #1

Чё за хрень, как победить ?


Если они "теряются" - надо тупо добавить два лишних.
И фсе.
...
Рейтинг: 0 / 0
09.08.2020, 16:08
    #39987948
Как правильно сохранить бинарный файл?
melihron

при таком сохранении теряются первые 2 символа:
Код: vbnet
1.
2.
3.
  Open savePath For Binary Access Write As #1
  Put #1, , rs(0).Value
  Close #1

Странно... Какой тип поля? Попробуйте сначала присвоить значение байтовому массиву, а затем массив записать в файл. Если опять будут теряться символы - убедитесь, что они есть в массиве.

ЗЫ. Более современный способ записи в бинарный (и не только) файл - ADODB.Stream
...
Рейтинг: 0 / 0
09.08.2020, 23:51
    #39988007
melihron
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно сохранить бинарный файл?
Всем спасибо, кто откликнулся.. помогло сначала присвоить строковой переменной:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
  Dim s As String  
'---------------------------------
' тут вызываем процедуру на sql-сервере и принимаем от неё содержимое файла в rs(0) (ado)
'---------------------------------
      s = rs(0).Value ' копируем всё тело файла в строковую переменную

      Open savePath For Binary Access Write As #1
      Put #1, , s
      Close #1


если вместо строки использовать байтовый массив, как все советуют, то объём файла увеличивается в 2 раза - к каждому символу добавляется #00 ... хз почему

to Кривцов Анатолий:
тип данных rs(0) получается автоматом Variant/Object/Field
про ADODB.Stream интересно, спасибо, поразбираюсь на досуге.
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как правильно сохранить бинарный файл? / 7 сообщений из 7, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]