OFF_T get_file_size(char *device) { OFF_T size = 0; fd_t fd; #ifdef WINDOWS SetLastError(0); fd = CreateFile(device, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL); #else fd = open(device, 0); #endif if (INVALID_FD(fd)) { return size; } size = SeekEnd(fd); size /= BLK_SIZE; CLOSE(fd); return size; }
uint64 File::Length () const { if_debug (ValidateState()); // BSD does not support seeking to the end of a device #ifdef TC_BSD if (Path.IsBlockDevice() || Path.IsCharacterDevice()) { # ifdef TC_MACOSX uint32 blockSize; uint64 blockCount; throw_sys_sub_if (ioctl (FileHandle, DKIOCGETBLOCKSIZE, &blockSize) == -1, wstring (Path)); throw_sys_sub_if (ioctl (FileHandle, DKIOCGETBLOCKCOUNT, &blockCount) == -1, wstring (Path)); return blockCount * blockSize; # else uint64 mediaSize; throw_sys_sub_if (ioctl (FileHandle, DIOCGMEDIASIZE, &mediaSize) == -1, wstring (Path)); return mediaSize; # endif } #endif off_t current = lseek (FileHandle, 0, SEEK_CUR); throw_sys_sub_if (current == -1, wstring (Path)); SeekEnd (0); uint64 length = lseek (FileHandle, 0, SEEK_CUR); SeekAt (current); return length; }
/// Gets the length of the file u64 YCFile::GetLength() { const u64 current_offset = GetPosition(); const u64 end_offset = SeekEnd(); SeekHed(current_offset); return end_offset; }
bool FileIntf::Impl::Append(BlockHandle fileHeader, const char* buff, size_t buffSize) { if (IsEmpty(fileHeader)) { return AppendImpl(fileHeader, buff, buffSize); } FilePos pos = {0}; SeekEnd(fileHeader, pos); return AppendImpl(pos, buff, buffSize); }
void BlockStream::OpenInit(dword mode, int64 _filesize) { streamsize = _filesize; style = STRM_READ|STRM_SEEK; SetLoading(); mode &= ~SHAREMASK; if(mode != READ) { style |= STRM_WRITE; SetStoring(); } rdlim = wrlim = ptr = buffer; pos = 0; pagepos = -1; pagedirty = false; if(!buffer) SetBufferSize(4096); if(mode == APPEND) SeekEnd(); }
bool File::Initialize(string path, FILE_OPEN_MODE mode) { Close(); _path = path; string openMode = ""; switch (mode) { case FILE_OPEN_MODE_READ: { openMode = "rb"; break; } case FILE_OPEN_MODE_TRUNCATE: { openMode = "w+b"; break; } case FILE_OPEN_MODE_APPEND: { openMode = "a+b"; break; } default: { FATAL("Invalid open mode"); return false; } } _pFile = fopen(STR(_path), STR(openMode)); if (_pFile == NULL) { int err = errno; FATAL("Unable to open file %s with mode `%s`. Error was: %s (%d)", STR(_path), STR(openMode), strerror(err), err); return false; } if (!SeekEnd()) return false; _size = ftell64(_pFile); if (!SeekBegin()) return false; return true; }
void CSheduleServerLog::ConstructL(const TDesC& aLogFileName) { // Literal constants _LIT(KScheduleServerLoggingDirectoryE, "E:\\Logs\\SchSvr\\"); _LIT(KScheduleServerLoggingDirectoryD, "D:\\Logs\\SchSvr\\"); _LIT(KScheduleServerLoggingDirectory, "_:\\Logs\\SchSvr\\"); User::LeaveIfError(iFs.Connect()); TFileName logFile; // Log to drive D if possible TInt error = iFs.MkDirAll(KScheduleServerLoggingDirectoryE); if (error == KErrAlreadyExists || error == KErrNone) { logFile.Append(KScheduleServerLoggingDirectoryE); } else { error = iFs.MkDirAll(KScheduleServerLoggingDirectoryD); if (error == KErrAlreadyExists || error == KErrNone) { logFile.Append(KScheduleServerLoggingDirectoryD); } else { // system drive directory TBuf<15> loggingDirOnSysDrive(KScheduleServerLoggingDirectory); loggingDirOnSysDrive[0] = 'A' + static_cast<TInt>(RFs::GetSystemDrive()); error = iFs.MkDirAll(loggingDirOnSysDrive); if (error != KErrAlreadyExists && error < KErrNone) User::Leave(error); logFile.Append(loggingDirOnSysDrive); } } // Open log file TParsePtrC parser(aLogFileName); logFile.Append(parser.Name()); #ifdef __WINS__ logFile.Append(_L(".WINS")); #elif __MARM__ logFile.Append(_L(".MARM")); #endif #ifdef _DEBUG logFile.Append(_L(".UDEB")); #else logFile.Append(_L(".UREL")); #endif logFile.Append(parser.Ext()); logFile.Append(_L(".TXT")); User::LeaveIfError(iFile.Replace(iFs, logFile, EFileStreamText | EFileShareAny)); SeekEnd(); NewLine(); NewLine(); _LIT(KNewLogEntry, "=== NEW LOG ==="); Write(KNewLogEntry); NewLine(); }