Вопрос Создание и/или редактирование txt файла.

Natrix

Новичок
Всем доброго времени суток.
Помогите пожалуйста найти код для создания и/или редактирования .txt файла.
Суть в чём, в директории указанной юзером при установки ПО, по дефолту создать .txt файл (или скопировать туда уже имеющийся, пустой)
И вписать в него, помимо двух фиксированных данных например:

\АА Effects\Support Files\Plug-ins\Effects
\АА Effects\Support Files\cursors

Добавить путь выбранный при установке (напр: D:\My_Prog\FS), что бы после установки текст в txt файле выглядел так:

D:\My_Prog\FS\АА Effects\Support Files\Plug-ins\Effects
D:\My_Prog\FS\АА Effects\Support Files\cursors

Если можно пожалуйста в виде примера с директориями.
 
Последнее редактирование:

Nemko

Дилетант
Модератор
Прототип:
function SaveStringToFile(const FileName: String; const S: AnsiString; const Append: Boolean): Boolean;

Описание:
Сохраняет указанную строку в указанный файл. Если Append является True и указанный файл уже существует, то текст будет добавлен к файлу, вместо его полной перезаписи. При успешном выполнении возвращает True, иначе False.

Комментарии:
Эта функция автоматически не записывает символ перевода строки. Если Append является True и в конце существующего файла отсутствует символ перевода строки, функция добавит содержимое переменной S к последней строке. Чтобы избежать этого, вы можете поместить символы перевода строки перед и после вашей строки:

SaveStringToFile('c:\filename.txt', #13#10 + 'the string' + #13#10, True);
procedure CurStepChanged(CurStep: TSetupStep);
begin
If CurStep=ssPostInstall
then​
begin
SaveStringToFile(ExpandConstant('{app}\FS\Support Files\Plug-ins\Effects\filename.txt', #13#10 + 'требуемая строка' + #13#10, True);//Строка будет дописываться под последней существующей​
end;
end;
 
Последнее редактирование:

Natrix

Новичок
Прототип:
function SaveStringToFile(const FileName: String; const S: AnsiString; const Append: Boolean): Boolean;

Описание:
Сохраняет указанную строку в указанный файл. Если Append является True и указанный файл уже существует, то текст будет добавлен к файлу, вместо его полной перезаписи. При успешном выполнении возвращает True, иначе False.

Комментарии:
Эта функция автоматически не записывает символ перевода строки. Если Append является True и в конце существующего файла отсутствует символ перевода строки, функция добавит содержимое переменной S к последней строке. Чтобы избежать этого, вы можете поместить символы перевода строки перед и после вашей строки:

SaveStringToFile('c:\filename.txt', #13#10 + 'the string' + #13#10, True);
procedure CurStepChanged(CurStep: TSetupStep);
begin
If CurStep=ssPostInstall
then​
begin
SaveStringToFile(ExpandConstant('{sd}')+'{app}\FS\Support Files\Plug-ins\Effects\filename.txt', #13#10 + 'требуемая строка' + #13#10, True);//Строка будет дописываться под последней существующей​
end;
end;
Строка:
procedure CurStepChanged(CurStep: TSetupStep);
Ошибка:
Duplicate identifier 'CURSTEPCHANGED'
При переносе:
Код:
begin
If CurStep=ssPostInstall
then
begin
SaveStringToFile(ExpandConstant('{app}\FS\Support Files\Plug-ins\Effects\filename.txt', #13#10 + 'требуемая строка' + #13#10, True);//Строка будет дописываться под последней существующей
end;
end;
В существующую процедуру: procedure CurStepChanged(CurStep: TSetupStep);
Строка:
SaveStringToFile(ExpandConstant('{app}\FS\Support Files\Plug-ins\Effects\filename.txt', #13#10 + 'требуемая строка' + #13#10, True);//Строка будет дописываться под последней существующей
Ошибка:
Invalid number of parameters.
 
Последнее редактирование:

vint56

Ветеран
Проверенный
Natrix,
Код:
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

[code]
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep=ssPostInstall then
begin
  SaveStringToFile(ExpandConstant('{app}\text.txt'), '' +ExpandConstant('{app}')+'\FS\Support Files\Plug-ins\Effects\'+ #13#10, True);
  SaveStringToFile(ExpandConstant('{app}\text.txt'), '' +ExpandConstant('{app}')+'\FS\АА Effects\Support Files\cursors\'+ #13#10, True);
  end;
end;
 

Natrix

Новичок
Код:
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

[code]
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep=ssPostInstall then
begin
  SaveStringToFile(ExpandConstant('{app}\text.txt'), '' +ExpandConstant('{app}')+'\FS\Support Files\Plug-ins\Effects\'+ #13#10, True);
  SaveStringToFile(ExpandConstant('{app}\text.txt'), '' +ExpandConstant('{app}')+'\FS\АА Effects\Support Files\cursors\'+ #13#10, True);
  end;
end;
Заработало, но у меня было:
if CurStep=ssInstall
Заменил на:
if CurStep=ssPostInstall

Спасибо vint56,
 
Последнее редактирование:

Natrix

Новичок
______________________________________________________________________________________________________________________________

Ещё один вопрос по теме. Если нужно к фиксированной части пути добавить не выбранную юзером директорию, а системную, какие константы должны быть указаны в ExpandConstant('{}') вместо {app} ? Т.е. надо, что бы дописало путь "system drive\usres\user name".
 
Последнее редактирование:

Natrix

Новичок
Скачайте русскую справку (http://krinkels.org/resources/russkaja-spravka-po-inno-setup.132/)
Там есть статья "Константы" в оглавлении.
Спасибо. Но:
- Там нет константы \users\ есть ли вообще такая?

Появилась ещё проблема, при CurStep = ssInstall файл не создаётся, а при ssPostInstall не работает прогресс бар.
Перенос в procedure DeinitializeSetup; ошибка если отменить установку до выбора пути, из-за {app}. Что же придумать?

Параллельный вопрос:
Checked:=True/False а как сделать выбранным и неактивным, на подобии fixed? cbGrayed не подходит. Есть ещё варианты?
 
Последнее редактирование:

Nemko

Дилетант
Модератор
Natrix
1. Не знаю к сожалению. Но есть информация

2. Попробуйте через function NextButtonClick(CurPageID: Integer): Boolean; и плюс чтобы условие было CurPageID = wpFinished (эта функция работает при нажатии на кнопку Далее\Завершить на странице финала(wpFinished))

3. Вроде у TCheckbox нету других поддерживаемых классов\состояний.
Придумал как реализовать через процедуру, но очень не профессионально
 
Последнее редактирование:

Косой

Новичок
Natrix, если нужно получить на выходе C:\Users\User_name, используй константу {%USERPROFILE}, или {%HOMEPATH}.
По второму вопросу вообще ничего не понял: какой там файл не создаётся и какой прогрессбар не работает...
Про чекбокс: как я понял, нужно, чтобы по умолчанию чекбокс был отмечен и неактивен. Тогда как вариант так:
var
NewCheckBox: TNewCheckBox;

procedure InitializeWizard();
begin
NewCheckBox := TNewCheckBox.Create(WizardForm);
with NewCheckBox do
begin
Name := 'NewCheckBox';
Parent := WizardForm;
Left := ScaleX(32);
Top := ScaleY(32);
Width := ScaleX(97);
Height := ScaleY(17);
Checked := True;
Enabled := False;
State := cbChecked;
end;
end;
 

Natrix

Новичок
Спасибо за помощь. Осталась одна проблема.
Код:
[code]
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep=ssPostInstall then
begin
  SaveStringToFile(ExpandConstant('{app}\text.txt'), '' +ExpandConstant('{app}')+'\My_Files\'+ #13#10, True);
  end;
end;
При CurStep = ssInstall файл не создаётся, а при ssPostInstall не работает прогресс бар.
Перенос в procedure DeinitializeSetup; ошибка если отменить установку до выбора пути, из-за {app} в коде.
Про через function NextButtonClick(CurPageID: Integer): Boolean; и плюс чтобы условие было CurPageID = wpFinished ни понял если честно.
 

Косой

Новичок
На ssInstall файл и не будет создаваться, ибо на этом этапе переменная {app} ещё неизвестна. И что за прогрессбар, от Isdone? Если да, то повесь прогрессбар обратно на ssinstall, а создание файла на ssPostinstall:
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssInstall then begin
какие-то действия
end;
if CurStep=ssPostInstall then
begin
SaveStringToFile(ExpandConstant('{app}\text.txt'), '' +ExpandConstant('{app}')+'\My_Files\'+ #13#10, True);
end;
end;
 
Последнее редактирование:

Natrix

Новичок
Косой, Спасибо большое.
Добавил к процессам в конце установки, надеюсь правильно:
Код:
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssInstall then begin
тут много действий
end;
if (CurStep=ssPostInstall) then begin
KillTimer(0, ProgressTimer);
HideLabelEx(LabelPct);
SaveStringToFile(ExpandConstant('{app}\text.txt'), '' +ExpandConstant('{app}')+'\My_Files\'+ #13#10, True);
if ISDoneError then begin
и т.д.
 
Последнее редактирование:
Сверху