Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.04.13;
Скачать: CL | DM;

Вниз

Заменить в файле   Найти похожие ветки 

 
alert2006   (2008-03-16 03:14) [0]

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


 
Loginov Dmitry ©   (2008-03-16 08:22) [1]

> чтобы файл не блокировался для доступа


Открыть его с параметром fmShareDenyNone


 
SerJaNT ©   (2008-03-16 10:55) [2]

Спасибо!
Теперь все хорошо, только вот данные теперь просто дописываются в файл, а надо как-бы только изменить содержимое.

Делаю так:

Templ:=TStringList.Create;
Templ2:=TStringList.Create;
S_1 := TFileStream.Create(prog+"data/Templates/General/template_line.html", fmOpenReadWrite, fmShareDenyWrite);
S_2 := TFileStream.Create(prog+"data/Templates/General/template.htm", fmOpenReadWrite, fmShareDenyWrite);
Templ.LoadFromStream(S_1);
templ.Text := Replace(templ.Text, "%DATE%", DateToStr(DateTimePicker1.Date));
templ.Text := Replace(templ.Text, "%TIME%", edit1.text);
templ.Text := Replace(templ.Text, "%PK%", combobox1.Items.Strings[combobox1.ItemIndex]);
templ.Text := Replace(templ.Text, "%FIO%", combobox2.Items.Strings[combobox2.ItemIndex]);
templ.Text := Replace(templ.Text, "%PLANE%", combobox3.Items.Strings[combobox3.ItemIndex]);
templ.Text := Replace(templ.Text, "%DISCIP%", combobox4.Items.Strings[combobox4.ItemIndex]);
templ.Text := Replace(templ.Text, "%MODULE%", combobox5.Items.Strings[combobox5.ItemIndex]);
templ.Text := Replace(templ.Text, "%PROC%", combobox6.Items.Strings[combobox6.ItemIndex]);
templ.Text := Replace(templ.Text, "%SIGN%", " ");
templ.Text := Replace(templ.Text, "%PRODUCT%", combobox7.Text);
templ.Text := Replace(templ.Text, "%MARK%", " ");
templ.Text := Replace(templ.Text, "%MANAGER%", " ");

Templ2.LoadFromStream(S_2);

Templ2.text:=  Replace(Templ2.text, "<!--HERE-->", templ.Text);

Templ2.SaveToStream(S_2);

Templ2.free;

Templ.free;
S_1.Free;
S_2.free;


и получается измененное содержимое файла template.htm дописывается еще раз в конец файла


 
SerJaNT ©   (2008-03-17 00:19) [3]

Удалено модератором


 
Anatoly Podgoretsky ©   (2008-03-17 00:44) [4]

Надо переоткрыть поток, только нафига здесь потоки не пойму.


 
SerJaNT ©   (2008-03-17 00:47) [5]


> Надо переоткрыть поток


как?


 
Anatoly Podgoretsky ©   (2008-03-17 00:53) [6]

А ты какое отношение имеешь к вопросу автора, заведи свою тему.


 
SerJaNT ©   (2008-03-17 01:19) [7]

Автор темы и есть я, просто через автозаполнение формы поставилось alert2006 а я не заметил


 
SerJaNT ©   (2008-03-17 08:50) [8]

Как переоткрыть поток?


 
SerJaNT ©   (2008-03-17 08:50) [9]

Как переоткрыть поток?


 
Сергей М. ©   (2008-03-17 08:53) [10]

Потоки тут нужны как корове седло


 
SerJaNT ©   (2008-03-17 08:57) [11]

А как сделать без потоков? Проблема в том что пока программа будет писать в файл, копия этой же программы, но запущенная на другом компе через сеть не может тоже производить запись (ошибка "Файл занят")


 
Сергей М. ©   (2008-03-17 09:01) [12]


> как сделать без потоков?


TStringList.LoadFromFile/SaveToFile


> пока программа будет писать в файл, копия этой же программы,
>  но запущенная на другом компе через сеть не может тоже
> производить запись (ошибка "Файл занят")
>


И это абсолютно нормальная ситуация.
Файл - это не воз из басни Крылова


 
SerJaNT ©   (2008-03-17 09:03) [13]

и как можно выйти из ситуации?


 
Slym ©   (2008-03-17 09:10) [14]

Templ2.text:=  Replace(Templ2.text, "<!--HERE-->", templ.Text);
S_2.Position:=0;
Templ2.SaveToStream(S_2);


 
Slym ©   (2008-03-17 09:18) [15]

Anatoly Podgoretsky ©   (17.03.08 0:44) [4]
только нафига здесь потоки не пойму

а нафига здесь стринглисты :)? убрал один TStringList, оставив второй только ради LoadFromFile/SaveToFile :) но можно и его убрать
var
 Templ:TStringList;
 S:string;
begin
 Templ:=TStringList.Create;
 try
   Templ.LoadFromFile(prog+"data/Templates/General/template_line.html");
   S:=templ.Text;
   S := Replace(S, "%DATE%", DateToStr(DateTimePicker1.Date));
   S := Replace(S, "%TIME%", edit1.text);
   S := Replace(templ.Text, "%PK%", combobox1.Items.Strings[combobox1.ItemIndex]);
   S := Replace(S, "%FIO%", combobox2.Items.Strings[combobox2.ItemIndex]);
   S := Replace(S, "%PLANE%", combobox3.Items.Strings[combobox3.ItemIndex]);
   S := Replace(S, "%DISCIP%", combobox4.Items.Strings[combobox4.ItemIndex]);
   S := Replace(S, "%MODULE%", combobox5.Items.Strings[combobox5.ItemIndex]);
   S := Replace(S, "%PROC%", combobox6.Items.Strings[combobox6.ItemIndex]);
   S := Replace(S, "%SIGN%", " ");
   S := Replace(S, "%PRODUCT%", combobox7.Text);
   S := Replace(S, "%MARK%", " ");
   S := Replace(S, "%MANAGER%", " ");
   Templ.LoadFromFile(prog+"data/Templates/General/template.htm");
   Templ.text:=  Replace(Templ.text, "<!--HERE-->", S);
   Templ2.SaveToFile(prog+"data/Templates/General/template.htm");
 finally
   Templ.free;
 end;


 
SerJaNT ©   (2008-03-17 09:23) [16]

Спасибо, Slym! Все работает как надо.


 
Плохиш ©   (2008-03-17 10:41) [17]


> SerJaNT ©   (17.03.08 08:57) [11]
> А как сделать без потоков? Проблема в том что пока программа
> будет писать в файл, копия этой же программы, но запущенная
> на другом компе через сеть не может тоже производить запись

Хороша логика :-)
Вторая программа пишет, пишет в файл, но тут первая программа взяла и файл переписала и все изменения в одно место.



Страницы: 1 вся ветка

Текущий архив: 2008.04.13;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.016 c
15-1204111799
TUser
2008-02-27 14:29
2008.04.13
Сервис - каталог каталогов ссылок


2-1205763221
Berkoot
2008-03-17 17:13
2008.04.13
Надстрочный индекс в Delphi


2-1205927025
Deled
2008-03-19 14:43
2008.04.13
Программный анализатор


2-1205522854
fics
2008-03-14 22:27
2008.04.13
TreeView


2-1205605298
Berkoot
2008-03-15 21:21
2008.04.13
Memo поле в таблице Paradox