Всем привет!
В общем вот код:
Код:
CASE eState OF
0: // шаг открытия файла
IF xWFile AND xOpenF //Запись файла
THEN
fbFileOpen(xExecute:=TRUE, sFileName:=sVisuFileName, eFileMode:=FILE.MODE.MAPPD);
// если файл, в который производится запись, не существует, то создадим его и запишем в него заголовок архива
IF fbFileOpen.eError=FILE.ERROR.NOT_EXIST
THEN
fbFileOpen(xExecute:=FALSE);
eState:=1; // шаг создания файла
xTitle := TRUE;
END_IF
// если файл существует и был успешно открыт, то переходим к шагу записи файла
IF fbFileOpen.xDone AND xWFile
THEN
hFile:=fbFileOpen.hFile;
fbFileOpen(xExecute:=FALSE);
eState:=2; // шаг записи в буфер
END_IF
ELSE IF xRFile AND xOpenF //Чтение файла
THEN
fbFileOpen(xExecute:=TRUE, sFileName:=sVisuFileName, eFileMode:=FILE.MODE.MREAD);
// если файл существует и был успешно открыт, то переходим к шагу чтения файла
IF fbFileOpen.xDone AND xRFile
THEN
hFile:=fbFileOpen.hFile;
fbFileOpen(xExecute:=FALSE);
eState:=6; // шаг установки позиции для чтения из файла
END_IF
END_IF
END_IF
1: // шаг создания файла
// в созданном файле еще нет записей
uiArchEntry:=0;
fbFileOpen(xExecute:=TRUE, sFileName:=sVisuFileName, eFileMode:=FILE.MODE.MWRITE);
IF fbFileOpen.xDone THEN
hFile := fbFileOpen.hFile;
fbFileOpen(xExecute:=FALSE);
// после создания файла можно перейти к шагу записи данных
eState:=2;
END_IF
IF fbFileOpen.xError THEN
// обработка ошибок
END_IF
2: // шаг записи в буфер
// если это первая запись в файле - то перед ней запишем заголовок
IF uiArchEntry=0
THEN
// запись строки архива в буфер
fbFileWrite(xExecute:=TRUE, hFile:=hFile, pBuffer:=ADR(c_sTitle), szSize:=1978);
ELSE
//Записываемая строка
sArchEntry := WstWstVLWst.sVeryLongWStr;
// запись строки архива в буфер
fbFileWrite(xExecute:=TRUE, hFile:=hFile, pBuffer:=ADR(sArchEntry), szSize:=1978); //1978 Байт строка
END_IF
IF fbFileWrite.xDone THEN
fbFileWrite(xExecute:=FALSE);
// после записи число строк в архиве увеличилось на одну
uiArchEntry:=uiArchEntry+1;
// теперь можно перейти к шагу сброса буфера в файл
eState:=3; // шаг сброса буфера в файл
END_IF
IF fbFileWrite.xError THEN
// обработка ошибок
END_IF
3: // шаг сброса буфера в файл
fbFileFlush(xExecute:=TRUE, hFile:=hFile);
IF fbFileFlush.xDone THEN
fbFileFlush(xExecute:=FALSE);
// теперь можно перейти к шагу закрытия файла
eState:=4; // шаг закрытия файла
END_IF
IF fbFileFlush.xError THEN
// обработка ошибок
END_IF
4: // шаг закрытия файла
fbFileClose(xExecute:=TRUE, hFile:=hFile);
IF fbFileClose.xDone THEN
fbFileClose(xExecute:=FALSE);
xOpenF := FALSE;
// теперь можно перейти к шагу определения размера файла
eState:=5; // шаг определения размера файла
END_IF
5: // шаг определения размера файла
fbFileGetSize(xExecute:=TRUE, sFileName:=sVisuFileName);
// определяем размер файла
IF fbFileGetSize.xDone THEN
udiArchSize:=fbFileGetSize.szSize;
fbFileGetSize(xExecute:=FALSE);
// вернемся на шаг открытия файла для ожидания следующего управляющего сигнала
eState:=0; // шаг открытия файла
END_IF
// размер несуществующего файла...
IF fbFileGetSize.eError=FILE.ERROR.NOT_EXIST THEN
// очевидно, можно интерпретировать как ноль
udiArchSize:=0;
fbFileGetSize(xExecute:=FALSE);
// вернемся на шаг открытия файла для ожидания следующего управляющего сигнала
eState:=0;
ELSIF fbFileGetSize.xError THEN
fbFileGetSize(xExecute:=FALSE);
eState:=0; // шаг открытия файла
END_IF
6: // шаг установки позиции для чтения из файла
fbFileSetPos(xExecute:=TRUE, hFile:=hFile, udiPos:=SIZEOF((1976)*2)); //Выбор строки для чтения количество байт на 1 строку умножить на номер строки
IF fbFileSetPos.xDone THEN
fbFileSetPos(xExecute:=FALSE);
// позиция для чтения выбрана, теперь можно перейти к шагу чтения данных
eState :=7;
END_IF
IF fbFileSetPos.xError THEN
// обработка ошибок
END_IF
7: // шаг чтения файла
fbFileRead(xExecute:=TRUE, hFile:=hFile, pBuffer:=ADR(stReadData), szBuffer:=SIZEOF(1976)); //Переменная для выгрузки и количество байт
IF fbFileRead.xDone THEN
fbFileRead(xExecute:=FALSE);
// теперь можно перейти к шагу закрытия файла
eState :=4;
END_IF
IF fbFileRead.xError THEN
// обработка ошибок
END_IF
END_CASE
Запись и прочие все работает отлично!! не могу прочитать фаил, где у меня ошибка?