Всем привет!
В общем вот код:
Запись и прочие все работает отлично!! не могу прочитать фаил, где у меня ошибка?Код: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


Ответить с цитированием
