PowerBuilder Создать файл

Я пытаюсь проверить, существует ли файл (INI). Если нет... он должен создать файл с соответствующими строками.

Как мне это?

Я старался..

s_text = "[БАЗА ДАННЫХ]" + "~r~n" + &

          "Server="   + "~r~n" + &

          "UserId="   + "~r~n" + &

          "Password=" + "~r~n" + &

          "DB="   + "~r~n" 

FileWrite(config.ini", s_text)

но он говорит неверный аргумент для файла


person Sid    schedule 14.03.2012    source источник


Ответы (2)


Для проверки существования файла есть FileExists( filename ), который возвращает логическое значение. Этой функции нужно только имя файла для выполнения проверки.

Напротив, FileWrite() нужно работать с открытым файлом. Ему присваивается «номер файла», который создается вызовом FileOpen() (и этот номер файла также должен быть присвоен FileClose() в конце процесса).

Почему бы не посмотреть документацию PowerBuilder? Для этого есть пример: в PB IDE нажмите F1, просмотрите раздел FileWrite PowerScript function, затем нажмите кнопку Пример. (Удивительно, но в примере не упоминается FileClose(), но вам нужно вызвать его ;o)

Не забудьте проверить наличие недопустимых номеров файлов (например, если имя файла не существует или файл уже используется).

РЕДАКТИРОВАТЬ: поскольку OP пояснил в комментариях, что он хотел бы иметь возможность вызывать SetProfileString() для несуществующего ini-файла (который не может создать новый ini-файл), вот пример нового ini создание файла:

int li_file
string ls_ini = "config.ini"
li_file = fileopen(ls_ini, LineMode!, write!)
FileClose(li_file)

SetProfileString(ls_ini, "Database", "Server", "host") 
SetProfileString(ls_ini, "Database", "UserId", "foo") 
SetProfileString(ls_ini, "Database", "Password", "bar") 
SetProfileString(ls_ini, "Database", "DB", "baz") 
person Seki    schedule 14.03.2012
comment
Я позвонил и попробовал эти функции. мой вопрос заключался в том, как создать этот файл, могу ли я открыть несуществующий файл с помощью FileOpen(), чтобы я мог их записать? Я делаю Filewrite, потому что файл еще не существует, если это так, я бы вместо этого использовал setprofilestring, потому что я открываю INI. - person Sid; 15.03.2012
comment
@Sid: Что касается создания файла, помощь кажется ясной: учитывая доступ к файлу, который вы предоставляете FileOpen(), он может открыть существующий файл для чтения или создать новый файл (или перезаписать существующий) для записать в. Теперь, что касается SetProfileString() в несуществующем файле, я проверил, что он не может создать новый файл. Но он может заполнить пустой. Я отредактировал свой ответ, чтобы привести пример. - person Seki; 15.03.2012
comment
извините, сэр, но мой вопрос заключался не в использовании этих функций, а в том, как я могу создать файл, если он не существует. но спасибо, я немного поработал и наконец сделал это. Спасибо еще раз - person Sid; 15.03.2012
comment
@Sid: ты пробовал фрагмент, который я опубликовал? Строки 3 и 4 на самом деле решают вашу проблему создания несуществующего файла. После этого вы можете использовать ProfileString и SetProfileString по своему желанию (и это избавляет от необходимости хранилища данных для заполнения текстового файл - я чувствую, что это странное и сложное средство для этой задачи)... - person Seki; 15.03.2012
comment
спасибо, сэр, только что понял. не знал, что FileOpen можно использовать, даже если файл не существует. это сработало - person Sid; 17.03.2012

Это был мой подход.

если файл INI не существует.

хранилище данных ds_1

ds_1 = СОЗДАТЬ хранилище данных

// d_dummy — табличный DW с 1 столбцом, который служит строкой, char(100)

ds_1.dataobject = 'd_dummy'

l_row = ds_1.InsertRow(0)

ds_1.SetItem(l_row, 'фиктивный', '[БАЗА ДАННЫХ]')

l_row = ds_1.InsertRow(0)

ds_1.SetItem(l_row, 'фиктивный', 'Сервер=')

l_row = ds_1.InsertRow(0)

ds_1.SetItem(l_row, 'фиктивный', 'UserId=')

l_row = ds_1.InsertRow(0)

ds_1.SetItem(l_row, 'фиктивный', 'Пароль=')

l_row = ds_1.InsertRow(0)

ds_1.SetItem(l_row, 'фиктивный', 'БД=')

ds_1.SaveAs("INIFILE.ini", Text!, FALSE)

затем я использовал ProfileString() и SetProfileString()

person Sid    schedule 15.03.2012