Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.04.13;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.006 c
15-1204017202
Правильный_Вася
2008-02-26 12:13
2008.04.13
FireBird - альтернатива


4-1186810295
Кирилл_А
2007-08-11 09:31
2008.04.13
bsToolWindow для WinApi


3-1195656537
umbra
2007-11-21 17:48
2008.04.13
одно ADOConnection для нескольких компонентов ADO


2-1205950526
Stepper
2008-03-19 21:15
2008.04.13
Почему сие не работает? Бутафорский ProgressBar :)


15-1203934590
DelphiN!
2008-02-25 13:16
2008.04.13
Инструменты для поиска "утечки" памяти в проекте





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский