/****************************************************************************** * * Title : fileUtility.c * Version 0.0 * * Description: read/write file function utilities. * * Author: Lukas Tomasek, tomasekl@fzu.cz * ******************************************************************************/ /****************************************************************************** * Header files * ******************************************************************************/ #include #include #include "fileUtility.h" #include "globalDefinitions.h" #include "errorHandler.h" #ifdef LAB_WINDOWS_CVI #include #include #endif /* LAB_WINDOWS_CVI */ /****************************************************************************** * Global functions * ******************************************************************************/ /*============================================================================= * writeToTextFile() *============================================================================= * * Writes memory block specified length to text file. * * Input: -> pathAndFileName , ->mode (APPEND or WRITE), * -> buffer - pointer to the data buffer * -> numberOfBytes - buffer length. * Note: don't use inside routine any global function which uses this function * like programError() or hostError() - infinite recursion!! */ ERROR_ID writeToTextFile(const char *pathAndFileName, int appendNotWrite, const char *buffer, size_t numberOfBytes){ FILE *fileHandle; char errorMessage[200]; ERROR_ID errorId=SUCCESS; unsigned int i; int status; errno=0; /* see errno.h */ if(appendNotWrite==0){ /* write */ fileHandle = fopen (pathAndFileName, "w"); /* open/create text file for write */ } else { /* APPEND */ fileHandle = fopen (pathAndFileName, "a"); /* open/create text file for append */ } if(fileHandle==NULL){ errorId=FILE_ERROR; printf("File:%s,line:%d;errorId=%d , fopen()-file name:%s, errno=%d(see errno.h).", __FILE__,__LINE__, errorId, pathAndFileName, errno); return(errorId); } /* save to file */ for(i=0; i pathAndFileName , ->mode (APPEND or WRITE), * -> buffer - pointer to the data buffer * -> numberOfBytes - buffer length. */ ERROR_ID writeToBinFile(const char *pathAndFileName, int appendNotWrite, const void *buffer, size_t numberOfBytes){ FILE *fileHandle; size_t bytesWritten; char errorMessage[200]; ERROR_ID errorId=SUCCESS; int status; errno=0; /* see errno.h */ if(appendNotWrite==0){ fileHandle = fopen (pathAndFileName, "wb"); /* open/create binary file for write */ } else { /* APPEND */ fileHandle = fopen (pathAndFileName, "ab"); /* open/create binary file for append */ } if(fileHandle==NULL){ errorId=FILE_ERROR; sprintf(errorMessage,"- file name:%s, errno=%d(see errno.h).", pathAndFileName, errno); programError(__FILE__,__LINE__, errorId, "fopen()", errno, errorMessage); return(errorId); } /* write to file */ bytesWritten=fwrite(buffer, sizeof(char), numberOfBytes, fileHandle); if(bytesWritten!=numberOfBytes){ errorId=FILE_ERROR; sprintf(errorMessage,"-file name:%s, errno=%d(see errno.h), numberOfBytes=%d, bytesWritten=%d.", pathAndFileName, errno, numberOfBytes, bytesWritten); programError(__FILE__,__LINE__, errorId, "fwrite()", errno, errorMessage); } status=fclose(fileHandle); if(status!=0){ errorId=FILE_ERROR; sprintf(errorMessage,"-file name:%s, errno=%d(see errno.h).", pathAndFileName, errno); programError(__FILE__,__LINE__, errorId, "fclose()", errno, errorMessage); } return(errorId); } /*============================================================================= * readFromBinFile() *============================================================================= * * Read memory block specified length from binary file. * * Input: -> pathAndFileName , * -> buffer - pointer to the data buffer * -> numberOfBytes - must be <= fileSize. * Note: File size must be known before readout(use GetFileSize() func. or similar), * so buffer cannot overflow if the file is larger. */ ERROR_ID readFromBinFile(const char *pathAndFileName, void *buffer, size_t numberOfBytes){ FILE *fileHandle; size_t bytesRead; char errorMessage[200]; ERROR_ID errorId=SUCCESS; int status; errno=0; fileHandle = fopen (pathAndFileName, "rb"); /* open binary file for read */ if(fileHandle==NULL){ errorId=FILE_ERROR; sprintf(errorMessage,"-file name:%s, errno=%d(see errno.h).", pathAndFileName, errno); programError(__FILE__,__LINE__, errorId, "fopen()", errno, errorMessage); return(errorId); } /* read file block and store it in the buffer */ bytesRead=fread(buffer, sizeof(char), numberOfBytes, fileHandle); if((bytesRead!=numberOfBytes)||(bytesRead==0)){ errorId=FILE_ERROR; sprintf(errorMessage,"-file name:%s, errno=%d(see errno.h), numberOfBytes=%d, bytesRead=%d.", pathAndFileName, errno, numberOfBytes, bytesRead); programError(__FILE__,__LINE__, errorId, "fread()", errno, errorMessage); } status=fclose(fileHandle); if(status!=0){ errorId=FILE_ERROR; sprintf(errorMessage,"-file name:%s, errno=%d(see errno.h).", pathAndFileName, errno); programError(__FILE__,__LINE__, errorId, "fclose()", errno, errorMessage); } return(errorId); } /*============================================================================= * getFileSize() *============================================================================= * Input: file name * Output: file size in bytes (*fileSize) * */ ERROR_ID getFileSize (char fileName[], unsigned int *fileSize){ ERROR_ID errorId=SUCCESS; int status; char errorMessage[200]; long fileSize_long; status=GetFileSize(fileName, &fileSize_long); /* LabWindows function - not WIN32! */ *fileSize=(unsigned int)fileSize_long; if(status!=0){ errorId=FILE_ERROR; sprintf(errorMessage,"-file name:%s, size=%ld", fileName, fileSize); programError(__FILE__,__LINE__, errorId, "GetFileSize()", status, errorMessage); } return(errorId); } /******************************************************************************/