Имя: Пароль:
1C
1С v8
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();