|
ADODB.Stream Как заменить содержимое файла, а не дописать его.
| ☑ |
0
Rounder
13.03.13
✎
11:19
|
Необходимо изменить 28-й байт бинарного файла.
Вот что делаю я:
Поток = Новый COMОбъект("ADODB.Stream");
Поток.Type = 1;
Поток.Mode = 3;
Поток.Open();
Поток.LoadFromFile(Путь + "start.dbf");
ДвоичнаяСтрока = Поток.Read(-1);
ДвоичнаяСтрока.SetValue(28, 1);
Поток.Write(ДвоичнаяСтрока);
Поток.SaveToFile(Путь + "start.dbf", 2);
Поток.Close();
Как сделать чтобы при SaveToFile не дозаписывалось к содержимому файла, а заменялось содержимое. В описанном выше коде содержимое дописывается к содержимому файла.
|
|
1
ZanderZ
13.03.13
✎
11:23
|
запиши в другой файл
|
|
2
zladenuw
13.03.13
✎
11:24
|
зачем тогда читаешь файл? просто запиши его с таким же именем или не ?
|
|
3
Rounder
13.03.13
✎
11:25
|
Не катит.
|
|
4
Rounder
13.03.13
✎
11:25
|
Я понимаю что можно манипулировать файлами, удалить тот что есть, и записать в пустой с таким же именем. Но это очень крайний случай.
Может я просто не разобрался до конца с ADODB.Stream и есть возможность ее методами реализовать эту задачу.
|
|
5
Жан Пердежон
13.03.13
✎
11:26
|
всё хочешь индексы 1Сных dbf-ок кому-то еще скармливать,
не проще ли сами dbf через ado создавать?
|
|
6
Rounder
13.03.13
✎
11:26
|
(2) Не совсем понял про зачем читаешь. А как еще можно получить его содержимое, часть которого должно быть изменено?
|
|
7
Rounder
13.03.13
✎
11:27
|
(5) Может и проще - но пока пытаюсь так решить проблему :)
|
|
8
Rounder
13.03.13
✎
11:27
|
Убегаю на совещанку - вернусь обязательно прочту - если будут еще комменты или советы.
|
|
9
Rounder
13.03.13
✎
12:12
|
Актуально.
|
|
10
Rounder
13.03.13
✎
12:30
|
Неужели никто не решал подобной задачи?
|
|
11
Rounder
13.03.13
✎
12:48
|
Проблему решил. Как обычно помог отладчик :)
Содержимое Поток удваивалось на строке Поток.Write(ДвоичнаяСтрока);
В итоге перед ней вставил Поток.Position = 0; и все заработало. И теперь Fox видит индексный файл :)
Спасибо всем кто пытался помочь.
Итоговый код выглядит так:
Поток = Новый COMОбъект("ADODB.Stream");
Поток.Type = 1;
Поток.Mode = 3;
Поток.Open();
Поток.LoadFromFile(Путь + "start.dbf");
ДвоичнаяСтрока = Поток.Read(-1);
ДвоичнаяСтрока.SetValue(28, 1);
Поток.Position = 0;
Поток.Write(ДвоичнаяСтрока);
Поток.SaveToFile(Путь + "start.dbf", 2);
Поток.Close();
|
|