Powerbuilder Создать файл - PullRequest
       7

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

0 голосов
/ 14 марта 2012

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

Как мне это сделать?

Я пытался..

s_text = "[DATABASE]" + "~ r ~ n" + &

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

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

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

          "DB="   + "~r~n" 

FileWrite (config.ini ", s_text)

но в файле указано неверный аргумент

Ответы [ 2 ]

3 голосов
/ 14 марта 2012

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

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

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

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

РЕДАКТИРОВАТЬ: , как ОП пояснил в комментариях, что он хотел бы иметь возможность вызвать 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") 
0 голосов
/ 15 марта 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, 'dummy', '[DATABASE]')

l_row = ds_1.InsertRow (0)

ds_1.SetItem (l_row, 'dummy', 'Server =')

l_row = ds_1.InsertRow (0)

ds_1.SetItem (l_row, 'dummy', 'UserId =')

l_row = ds_1.InsertRow (0)

ds_1.SetItem (l_row, 'dummy', 'Password =')

l_row = ds_1.InsertRow (0)

ds_1.SetItem (l_row, 'dummy', 'DB =')

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

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

...