Работа с файлами
Вся информация на компьютере хранится на жестком диске в виде файлов.
И если Ваша программа должна хранить какие-то данные, то не обойтись без создания файлов, записи и чтении из них информации. Следующая функция открывает файл с именем test.txt или, если такой файл не существует - создает его:
Result.l=OpenFile(#File, "test.txt")
#File - уникальный номер файла, задаем его сами (0, 1, 2 .....) и используем потом для работы с этим файлом,
если вместо уникального номера написать #PB_Any, для работы с файлом будем использовать переменную Result (если функция вернула 0 - значит файл не удалось открыть/создать).
Часто пишут так:
Result.l=OpenFile(#PB_Any, "test.txt")
Или так:
If OpenFile(0, "test.txt")
--этот код выполняется, если файл удалось открыть или создать--
EndIf
По моему мнению второй вариант предпочтительнее, так как он позволяет избежать непредсказуемых ошибок, связанных с правами доступа к каким либо файлам, папкам или дискам.
Также создать файл можно другим способом:
Result.l=CreateFile(#PB_Any, "test.txt")
CreateFile(0, "test.txt")
Аргументы этой функции полностью аналогичны.
Если Вы хотите открыть файл только для чтения:
Result.l=ReadFile(#PB_Any, "test.txt")
ReadFile(0, "test.txt")
После выполнения всех операций с файлом его обязательно надо закрыть:
CloseFile(#File)
#File - в нашем случае 0 или Result.
Если его не закрыть возможно появление непредсказуемых ошибок.
Загрузка изображений в память,
при компиляции файлы изображения окажутся внутри exe файла.
; Сохранение рисунка в исполняемом файле на этапе компиляции
DataSection
Im:
IncludeBinary "PB_Skin5.bmp"
ImEnd:
Im1:
IncludeBinary "x_1.bmp"
Im1End:
..............
..............
EndDataSection
; Загрузка рисунков из памяти
CatchImage(0, ?Im, ?ImEnd-?Im)
CatchImage(1, ?Im1, ?Im1End-?Im1)
CatchImage(2, ?Im2, ?Im2End-?Im2)
.........
.........
DataSection
Im:
IncludeBinary "PB_Skin5.bmp"
ImEnd:
Im1:
IncludeBinary "x_1.bmp"
Im1End:
..............
..............
EndDataSection
; Загрузка рисунков из памяти
CatchImage(0, ?Im, ?ImEnd-?Im)
CatchImage(1, ?Im1, ?Im1End-?Im1)
CatchImage(2, ?Im2, ?Im2End-?Im2)
.........
.........
Загрузка звуковых файлов в память:
IB1:
IncludeBinary "son_1.ogg"
IB2:
IB3:
IncludeBinary "Son_2.ogg"
IB4:
.......................
.......................
.......................
CatchSound(0,?IB1,?IB2-?IB1)
CatchSound(0,?IB1,?IB4-?IB3 )
.....................
.....................
.....................
IncludeBinary "son_1.ogg"
IB2:
IB3:
IncludeBinary "Son_2.ogg"
IB4:
.......................
.......................
.......................
CatchSound(0,?IB1,?IB2-?IB1)
CatchSound(0,?IB1,?IB4-?IB3 )
.....................
.....................
.....................
Пример кода загрузки текстового файла с возможностью его дальнейшего изменения и сохранения
Procedure OFile(file.s)
d=ReadFile(1, file)
If d
While Eof(1)=0
Text$ = Text$+ReadString(1)+Chr(13)+ Chr(10)
Wend
CloseFile(1)
SetGadgetText(62, Text$)
EndIf
EndProcedure
If ReadFile(1,"фаил.txt")
Teste$=""
Size=Lof(1)
If Size>0
Teste$=Space(Size)
ReadData(1,@Teste$,Size)
EndIf
closefile(1)
Else
MessageRequester("", "Файл не обноружен!", #MB_OK|#MB_ICONERROR)
End
EndIf
OpenWindow(0, 0, 0, 450, 280, "Заголовок", #PB_Window_MinimizeGadget | #PB_Window_ScreenCentered)
StringGadget(62, 8, 8, 430, 200, "",#ES_MULTILINE )
HyperLinkGadget(6, 33, 220, 80, 15, "Загрузить", $ffffff)
HyperLinkGadget(7, 353, 220, 80, 15, "Сохранить", $ffffff)
SetGadgetText(62, Teste$)
Repeat
Event=WaitWindowEvent()
Window=EventWindow()
Gadget=EventGadget()
Select Event
Case #PB_Event_Gadget
Select EventGadget()
;..........
Case 6
file$ = OpenFileRequester("Open File","","Все файлы|*.*",1)
OFile(file$)
Case 7
OpenFile(0, "файл.txt")
FileSeek(0, 0)
WriteStringN(0, GetGadgetText(62))
CloseFile(0)
MessageRequester("Ok","Файл сохранен")
;..........
EndSelect
EndSelect
If Event=#PB_Event_CloseWindow
Break
EndIf
ForEver
d=ReadFile(1, file)
If d
While Eof(1)=0
Text$ = Text$+ReadString(1)+Chr(13)+ Chr(10)
Wend
CloseFile(1)
SetGadgetText(62, Text$)
EndIf
EndProcedure
If ReadFile(1,"фаил.txt")
Teste$=""
Size=Lof(1)
If Size>0
Teste$=Space(Size)
ReadData(1,@Teste$,Size)
EndIf
closefile(1)
Else
MessageRequester("", "Файл не обноружен!", #MB_OK|#MB_ICONERROR)
End
EndIf
OpenWindow(0, 0, 0, 450, 280, "Заголовок", #PB_Window_MinimizeGadget | #PB_Window_ScreenCentered)
StringGadget(62, 8, 8, 430, 200, "",#ES_MULTILINE )
HyperLinkGadget(6, 33, 220, 80, 15, "Загрузить", $ffffff)
HyperLinkGadget(7, 353, 220, 80, 15, "Сохранить", $ffffff)
SetGadgetText(62, Teste$)
Repeat
Event=WaitWindowEvent()
Window=EventWindow()
Gadget=EventGadget()
Select Event
Case #PB_Event_Gadget
Select EventGadget()
;..........
Case 6
file$ = OpenFileRequester("Open File","","Все файлы|*.*",1)
OFile(file$)
Case 7
OpenFile(0, "файл.txt")
FileSeek(0, 0)
WriteStringN(0, GetGadgetText(62))
CloseFile(0)
MessageRequester("Ok","Файл сохранен")
;..........
EndSelect
EndSelect
If Event=#PB_Event_CloseWindow
Break
EndIf
ForEver
Открыть любой файл программой по умолчанию :
(открываемый файл должен лежать в одной директории с программой)
OpenWindow(0,0,0,220,70,"Заголовок",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
ButtonGadget(0,80,40,65,25,"Открыть")
StringGadget(1,10,10,200,20,"файл.расширение")
Repeat
EventID = WaitWindowEvent()
Select EventID
Case #PB_Event_Gadget
Select EventGadget()
Case 0
RunProgram(GetGadgetText(1))
EndSelect
EndSelect
Until EventID = #PB_Event_CloseWindow
CloseWindow(0)
End
ButtonGadget(0,80,40,65,25,"Открыть")
StringGadget(1,10,10,200,20,"файл.расширение")
Repeat
EventID = WaitWindowEvent()
Select EventID
Case #PB_Event_Gadget
Select EventGadget()
Case 0
RunProgram(GetGadgetText(1))
EndSelect
EndSelect
Until EventID = #PB_Event_CloseWindow
CloseWindow(0)
End