本文整理汇总了C++中DiskFile::Close方法的典型用法代码示例。如果您正苦于以下问题:C++ DiskFile::Close方法的具体用法?C++ DiskFile::Close怎么用?C++ DiskFile::Close使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类DiskFile
的用法示例。
在下文中一共展示了DiskFile::Close方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: CopyFile
bool FileSystem::CopyFile(const char* srcFilename, const char* dstFilename)
{
DiskFile infile;
if (!infile.Open(srcFilename, DiskFile::omRead))
{
return false;
}
DiskFile outfile;
if (!outfile.Open(dstFilename, DiskFile::omWrite))
{
return false;
}
CharBuffer buffer(1024 * 50);
int cnt = buffer.Size();
while (cnt == buffer.Size())
{
cnt = (int)infile.Read(buffer, buffer.Size());
outfile.Write(buffer, cnt);
}
infile.Close();
outfile.Close();
return true;
}
示例2: Read
bool RarVolume::Read()
{
debug("Checking file %s", *m_filename);
DiskFile file;
if (!file.Open(m_filename, DiskFile::omRead))
{
return false;
}
m_version = DetectRarVersion(file);
file.Seek(0);
bool ok = false;
switch (m_version)
{
case 3:
ok = ReadRar3Volume(file);
break;
case 5:
ok = ReadRar5Volume(file);
break;
}
file.Close();
DecryptFree();
LogDebugInfo();
return ok;
}
示例3: LoadFileIntoBuffer
bool FileSystem::LoadFileIntoBuffer(const char* filename, CharBuffer& buffer, bool addTrailingNull)
{
DiskFile file;
if (!file.Open(filename, DiskFile::omRead))
{
return false;
}
// obtain file size.
file.Seek(0, DiskFile::soEnd);
int size = (int)file.Position();
file.Seek(0);
// allocate memory to contain the whole file.
buffer.Reserve(size + (addTrailingNull ? 1 : 0));
// copy the file into the buffer.
file.Read(buffer, size);
file.Close();
if (addTrailingNull)
{
buffer[size] = 0;
}
return true;
}
示例4:
bool Par1Repairer::RemoveParFiles(void) {
if (noiselevel > CommandLine::nlSilent
&& parlist.size() > 0) {
cout << endl << "Purge par files." << endl;
}
for (list<string>::const_iterator s=parlist.begin(); s!=parlist.end(); ++s) {
DiskFile *diskfile = new DiskFile;
if (diskfile->Open(*s)) {
if (noiselevel > CommandLine::nlSilent) {
string name;
string path;
DiskFile::SplitFilename((*s), path, name);
cout << "Remove \"" << name << "\"." << endl;
}
if (diskfile->IsOpen())
diskfile->Close();
diskfile->Delete();
}
delete diskfile;
}
return true;
}
示例5: Copy
bool Copy(File& srcFile, const char* destFilename)
{
// Operate in 16k buffers.
const DWORD BUFFER_SIZE = 16 * 1024;
DWORD fileSize = (DWORD)srcFile.GetLength();
// See if the destination file exists.
DiskFile destFile;
if (!destFile.Open(destFilename, File::MODE_CREATE | File::MODE_WRITEONLY))
return false;
// Allocate the buffer space.
BYTE* buffer = (BYTE*)_alloca(BUFFER_SIZE);
// Keep copying until there is no more file left to copy.
while (fileSize > 0)
{
// Copy the minimum of BUFFER_SIZE or the fileSize.
DWORD readSize = min(BUFFER_SIZE, fileSize);
srcFile.Read(buffer, readSize);
destFile.Write(buffer, readSize);
fileSize -= readSize;
}
// Close the destination virtual file.
destFile.Close();
return true;
}
示例6: Copy
bool Copy(File& srcFile, const char* destFilename)
{
// Operate in 16k buffers.
const uint32_t BUFFER_SIZE = 16 * 1024;
uint32_t fileSize = (uint32_t)srcFile.GetLength();
if (!Misc::PathCreate(destFilename))
return false;
// See if the destination file exists.
DiskFile destFile;
if (!destFile.Open(destFilename, File::MODE_CREATE | File::MODE_WRITEONLY))
return false;
// Allocate the buffer space.
BYTE* buffer = (BYTE*)alloca(BUFFER_SIZE);
// Keep copying until there is no more file left to copy.
while (fileSize > 0) {
// Copy the minimum of BUFFER_SIZE or the fileSize.
uint32_t readSize = BUFFER_SIZE < fileSize ? BUFFER_SIZE : fileSize;
if (srcFile.Read(buffer, readSize) != readSize)
return false;
destFile.Write(buffer, readSize);
fileSize -= readSize;
}
// Close the destination virtual file.
destFile.Close();
return true;
}
示例7: isdigit
// Scan any extra files specified on the command line
bool Par1Repairer::VerifyExtraFiles(const list<CommandLine::ExtraFile> &extrafiles) {
for (ExtraFileIterator i=extrafiles.begin();
i!=extrafiles.end() && completefilecount<sourcefiles.size();
++i) {
string filename = i->FileName();
bool skip = false;
// Find the file extension
string::size_type where = filename.find_last_of('.');
if (where != string::npos) {
string tail = filename.substr(where+1);
// Check the the file extension is the correct form
if ((tail[0] == 'P' || tail[0] == 'p') &&
(
((tail[1] == 'A' || tail[1] == 'a') && (tail[2] == 'R' || tail[2] == 'r'))
||
(isdigit(tail[1]) && isdigit(tail[2]))
)) {
skip = true;
}
}
if (!skip) {
filename = DiskFile::GetCanonicalPathname(filename);
// Has this file already been dealt with
if (diskfilemap.Find(filename) == 0) {
DiskFile *diskfile = new DiskFile;
// Does the file exist
if (!diskfile->Open(filename)) {
delete diskfile;
continue;
}
// Remember that we have processed this file
bool success = diskfilemap.Insert(diskfile);
assert(success);
// Do the actual verification
VerifyDataFile(diskfile, 0);
// Ignore errors
// We have finished with the file for now
diskfile->Close();
// Find out how much data we have found
UpdateVerificationResults();
}
}
}
return true;
}
示例8: SaveBufferIntoFile
bool FileSystem::SaveBufferIntoFile(const char* filename, const char* buffer, int bufLen)
{
DiskFile file;
if (!file.Open(filename, DiskFile::omWrite))
{
return false;
}
int writtenBytes = (int)file.Write(buffer, bufLen);
file.Close();
return writtenBytes == bufLen;
}
示例9: CheckRegularFile
void ParRenamer::CheckRegularFile(const char* destDir, const char* filename)
{
debug("Computing hash for %s", filename);
DiskFile file;
if (!file.Open(filename, DiskFile::omRead))
{
PrintMessage(Message::mkError, "Could not open file %s", filename);
return;
}
// load first 16K of the file into buffer
static const int blockSize = 16*1024;
CharBuffer buffer(blockSize);
int readBytes = (int)file.Read(buffer, buffer.Size());
if (readBytes != buffer.Size() && file.Error())
{
PrintMessage(Message::mkError, "Could not read file %s", filename);
return;
}
file.Close();
Par2::MD5Hash hash16k;
Par2::MD5Context context;
context.Update(buffer, readBytes);
context.Final(hash16k);
debug("file: %s; hash16k: %s", FileSystem::BaseFileName(filename), hash16k.print().c_str());
for (FileHash& fileHash : m_fileHashList)
{
if (!strcmp(fileHash.GetHash(), hash16k.print().c_str()))
{
debug("Found correct filename: %s", fileHash.GetFilename());
fileHash.SetFileExists(true);
BString<1024> dstFilename("%s%c%s", destDir, PATH_SEPARATOR, fileHash.GetFilename());
if (!FileSystem::FileExists(dstFilename) && !IsSplittedFragment(filename, fileHash.GetFilename()))
{
RenameFile(filename, dstFilename);
}
break;
}
}
}
示例10: Filelog
void Log::Filelog(const char* msg, ...)
{
if (m_logFilename.Empty())
{
return;
}
char tmp2[1024];
va_list ap;
va_start(ap, msg);
vsnprintf(tmp2, 1024, msg, ap);
tmp2[1024-1] = '\0';
va_end(ap);
time_t rawtime = Util::CurrentTime() + g_Options->GetTimeCorrection();
char time[50];
Util::FormatTime(rawtime, time, 50);
if ((int)rawtime/86400 != (int)m_lastWritten/86400 && g_Options->GetWriteLog() == Options::wlRotate)
{
RotateLog();
}
m_lastWritten = rawtime;
DiskFile file;
if (file.Open(m_logFilename, DiskFile::omAppend))
{
#ifdef WIN32
uint64 processId = GetCurrentProcessId();
uint64 threadId = GetCurrentThreadId();
#else
uint64 processId = (uint64)getpid();
uint64 threadId = (uint64)pthread_self();
#endif
#ifdef DEBUG
file.Print("%s\t%llu\t%llu\t%s%s", time, processId, threadId, tmp2, LINE_ENDING);
#else
file.Print("%s\t%s%s", time, tmp2, LINE_ENDING);
#endif
file.Close();
}
else
{
perror(m_logFilename);
}
}
示例11: CheckParFile
void ParRenamer::CheckParFile(const char* destDir, const char* filename)
{
debug("Checking par2-header for %s", filename);
DiskFile file;
if (!file.Open(filename, DiskFile::omRead))
{
PrintMessage(Message::mkError, "Could not open file %s", filename);
return;
}
// load par2-header
Par2::PACKET_HEADER header;
int readBytes = (int)file.Read(&header, sizeof(header));
if (readBytes != sizeof(header) && file.Error())
{
PrintMessage(Message::mkError, "Could not read file %s", filename);
return;
}
file.Close();
// Check the packet header
if (Par2::packet_magic != header.magic || // not par2-file
sizeof(Par2::PACKET_HEADER) > header.length || // packet length is too small
0 != (header.length & 3) || // packet length is not a multiple of 4
FileSystem::FileSize(filename) < (int)header.length) // packet would extend beyond the end of the file
{
// not par2-file or damaged header, ignoring the file
return;
}
BString<100> setId = header.setid.print().c_str();
for (char* p = setId; *p; p++) *p = tolower(*p); // convert string to lowercase
debug("Storing: %s; setid: %s", FileSystem::BaseFileName(filename), *setId);
m_parInfoList.emplace_back(filename, setId);
}
示例12: SetupConfigFile
void WinConsole::SetupConfigFile()
{
// create new config-file from config template
char commonAppDataPath[MAX_PATH];
SHGetFolderPath(nullptr, CSIDL_COMMON_APPDATA, nullptr, 0, commonAppDataPath);
BString<1024> filename("%s\\NZBGet\\nzbget.conf", commonAppDataPath);
BString<1024> appDataPath("%s\\NZBGet", commonAppDataPath);
FileSystem::CreateDirectory(appDataPath);
BString<1024> confTemplateFilename("%s\\nzbget.conf.template", g_Options->GetAppDir());
CopyFile(confTemplateFilename, filename, FALSE);
// set MainDir in the config-file
int size = 0;
CharBuffer config;
if (FileSystem::LoadFileIntoBuffer(filename, config, true))
{
const char* SIGNATURE = "MainDir=${AppDir}\\downloads";
char* p = strstr(config, SIGNATURE);
if (p)
{
DiskFile outfile;
if (outfile.Open(filename, DiskFile::omWrite))
{
outfile.Write(config, p - config);
outfile.Write("MainDir=", 8);
outfile.Write(appDataPath, strlen(appDataPath));
outfile.Write(p + strlen(SIGNATURE), config.Size() - 1 - (p + strlen(SIGNATURE) - config) - 1);
outfile.Close();
}
}
}
// create default destination directory (which is not created on start automatically)
BString<1024> completeDir("%s\\NZBGet\\complete", commonAppDataPath);
FileSystem::CreateDirectory(completeDir);
}
示例13: CompleteFileParts
//.........这里部分代码省略.........
}
if (!g_Options->GetRawArticle() && !directWrite && pa->GetSegmentOffset() > -1 &&
pa->GetSegmentOffset() > outfile.Position() && outfile.Position() > -1)
{
memset(buffer, 0, buffer.Size());
if (!g_Options->GetSkipWrite())
{
while (pa->GetSegmentOffset() > outfile.Position() && outfile.Position() > -1 &&
outfile.Write(buffer, std::min((int)(pa->GetSegmentOffset() - outfile.Position()), buffer.Size())));
}
}
if (pa->GetSegmentContent())
{
if (!g_Options->GetSkipWrite())
{
outfile.Seek(pa->GetSegmentOffset());
outfile.Write(pa->GetSegmentContent(), pa->GetSegmentSize());
}
pa->DiscardSegment();
}
else if (!g_Options->GetRawArticle() && !directWrite && !g_Options->GetSkipWrite())
{
DiskFile infile;
if (pa->GetResultFilename() && infile.Open(pa->GetResultFilename(), DiskFile::omRead))
{
int cnt = buffer.Size();
while (cnt == buffer.Size())
{
cnt = (int)infile.Read(buffer, buffer.Size());
outfile.Write(buffer, cnt);
}
infile.Close();
}
else
{
m_fileInfo->SetFailedArticles(m_fileInfo->GetFailedArticles() + 1);
m_fileInfo->SetSuccessArticles(m_fileInfo->GetSuccessArticles() - 1);
m_fileInfo->GetNzbInfo()->PrintMessage(Message::mkError,
"Could not find file %s for %s [%i/%i]",
pa->GetResultFilename(), *infoFilename, pa->GetPartNumber(),
(int)m_fileInfo->GetArticles()->size());
}
}
else if (g_Options->GetRawArticle())
{
BString<1024> dstFileName("%s%c%03i", *ofn, PATH_SEPARATOR, pa->GetPartNumber());
if (!FileSystem::MoveFile(pa->GetResultFilename(), dstFileName))
{
m_fileInfo->GetNzbInfo()->PrintMessage(Message::mkError,
"Could not move file %s to %s: %s", pa->GetResultFilename(),
*dstFileName, *FileSystem::GetLastErrorMessage());
}
}
if (m_format == Decoder::efYenc)
{
crc = firstArticle ? pa->GetCrc() : Crc32::Combine(crc, pa->GetCrc(), pa->GetSegmentSize());
firstArticle = false;
}
}
buffer.Clear();
}
示例14: memset
// Read source data, process it through the RS matrix and write it to disk.
bool Par2Creator::ProcessData(u64 blockoffset, size_t blocklength)
{
// Clear the output buffer
memset(outputbuffer, 0, chunksize * recoveryblockcount);
// If we have defered computation of the file hash and block crc and hashes
// sourcefile and sourceindex will be used to update them during
// the main recovery block computation
vector<Par2CreatorSourceFile*>::iterator sourcefile = sourcefiles.begin();
u32 sourceindex = 0;
vector<DataBlock>::iterator sourceblock;
u32 inputblock;
DiskFile *lastopenfile = NULL;
// For each input block
for ((sourceblock=sourceblocks.begin()),(inputblock=0);
sourceblock != sourceblocks.end();
++sourceblock, ++inputblock)
{
// Are we reading from a new file?
if (lastopenfile != (*sourceblock).GetDiskFile())
{
// Close the last file
if (lastopenfile != NULL)
{
lastopenfile->Close();
}
// Open the new file
lastopenfile = (*sourceblock).GetDiskFile();
if (!lastopenfile->Open())
{
return false;
}
}
// Read data from the current input block
if (!sourceblock->ReadData(blockoffset, blocklength, inputbuffer))
return false;
if (deferhashcomputation)
{
assert(blockoffset == 0 && blocklength == blocksize);
assert(sourcefile != sourcefiles.end());
(*sourcefile)->UpdateHashes(sourceindex, inputbuffer, blocklength);
}
// Function that does the subtask in multiple threads if appropriate.
if (!this->CreateParityBlocks (blocklength, inputblock))
return false;
// Work out which source file the next block belongs to
if (++sourceindex >= (*sourcefile)->BlockCount())
{
sourceindex = 0;
++sourcefile;
}
}
// Close the last file
if (lastopenfile != NULL)
{
lastopenfile->Close();
}
if (noiselevel > CommandLine::nlQuiet)
cout << "Writing recovery packets\r";
// For each output block
for (u32 outputblock=0; outputblock<recoveryblockcount;outputblock++)
{
// Select the appropriate part of the output buffer
char *outbuf = &((char*)outputbuffer)[chunksize * outputblock];
// Write the data to the recovery packet
if (!recoverypackets[outputblock].WriteData(blockoffset, blocklength, outbuf))
return false;
}
if (noiselevel > CommandLine::nlQuiet)
cout << "Wrote " << recoveryblockcount * blocklength << " bytes to disk" << endl;
return true;
}
示例15: offsetof
//.........这里部分代码省略.........
remaining < fileentry->entrysize)
break;
// Check the length of the filename
if (fileentry->entrysize <= sizeof(PAR1FILEENTRY))
break;
// Check the file size
if (blocksize < fileentry->filesize)
blocksize = fileentry->filesize;
// Copy whole of file entry
memcpy((void*)fileentry, (void*)current, (size_t)(u64)fileentry->entrysize);
// Create source file and add it to the appropriate list
Par1RepairerSourceFile *sourcefile = new Par1RepairerSourceFile(fileentry, searchpath);
if (fileentry->status & INPARITYVOLUME) {
sourcefiles.push_back(sourcefile);
} else {
extrafiles.push_back(sourcefile);
}
remaining -= (size_t)fileentry->entrysize;
current += (size_t)fileentry->entrysize;
fileindex++;
}
delete [] (u64*)fileentry;
// Did we find the correct number of files
if (fileindex < fileheader.numberoffiles) {
vector<Par1RepairerSourceFile*>::iterator i = sourcefiles.begin();
while (i != sourcefiles.end()) {
Par1RepairerSourceFile *sourcefile = *i;
delete sourcefile;
++i;
}
sourcefiles.clear();
i = extrafiles.begin();
while (i != extrafiles.end()) {
Par1RepairerSourceFile *sourcefile = *i;
delete sourcefile;
++i;
}
extrafiles.clear();
delete [] temp;
break;
}
filelist = temp;
filelistsize = (u32)fileheader.filelistsize;
}
// Is this a recovery volume?
if (fileheader.volumenumber > 0) {
// Make sure there is data and that it is the correct size
if (fileheader.dataoffset == 0 || fileheader.datasize != blocksize)
break;
// What volume number is this?
volumenumber = (u32)(fileheader.volumenumber - 1);
// Do we already have this volume?
if (recoveryblocks.find(volumenumber) == recoveryblocks.end()) {
// Create a data block
DataBlock *datablock = new DataBlock;
datablock->SetLength(blocksize);
datablock->SetLocation(diskfile, fileheader.dataoffset);
// Store it in the map
recoveryblocks.insert(pair<u32, DataBlock*>(volumenumber, datablock));
havevolume = true;
}
}
} while (false);
delete [] buffer;
}
// We have finished with the file for now
diskfile->Close();
if (noiselevel > CommandLine::nlQuiet) {
if (havevolume) {
cout << "Loaded recovery volume " << volumenumber << endl;
} else {
cout << "No new recovery volumes found" << endl;
}
}
// Remember that the file was processed
bool success = diskfilemap.Insert(diskfile);
assert(success);
return true;
}