#include "file.h" #include "../String/StringBuilder.h" #include "io_includes.h" ktid_define(File); bool file_exists(char* path){ // tryLast(path_throwIfEscapes(path)); #if KFS_USE_WINDOWS_H DWORD dwAttrib = GetFileAttributes(path); return (bool)( (dwAttrib != INVALID_FILE_ATTRIBUTES) & // file exists !(dwAttrib & FILE_ATTRIBUTE_DIRECTORY)); // file is not directory #else struct stat stats; int rez=stat(path, &stats); return (bool)( (rez!=-1) & // file exists !(S_ISDIR(stats.st_mode))); // file is not directory #endif } Maybe file_delete(char* path, bool recursive){ throw(ERR_NOTIMPLEMENTED); return MaybeNull; } char* FileOpenMode_toStr(FileOpenMode m){ char* p; switch(m){ case FileOpenMode_Read: p="rb"; break; case FileOpenMode_Write: p="wb"; break; case FileOpenMode_Append: p="ab"; break; case FileOpenMode_ReadWrite: p="wb+"; break; case FileOpenMode_ReadAppend: p="ab+"; break; default: dbg(m); throw(ERR_UNEXPECTEDVAL); } return p; } Maybe file_open(char* path, FileOpenMode mode){ File* file=fopen(path, FileOpenMode_toStr(mode)); if(!file) safethrow(cptr_concat("can't open file ", (char*)path),;); return SUCCESS(UniHeapPtr(File,file)); } Maybe file_close(File* file){ if(!file) safethrow(ERR_NULLPTR,;); if(fclose(file)) safethrow(ERR_IO,;); return MaybeNull; } #define ioWriteCheck()\ if(rezult==EOF)\ safethrow(ERR_IO_EOF,;);\ if(rezult!=0)\ safethrow(ERR_IO,;); Maybe file_writeChar(File* file, char byte){ int rezult=fputc(byte, file); ioWriteCheck(); return MaybeNull; } Maybe file_writeBuffer(File* file, char* buffer, uint64 length){ int rezult=0; for(uint64 i=0; i