Can someone look at the code on this link. When I try to compress larger files, few GB nothing happens.
http://3adly.blogspot.com/2011/06/qt-folder-compression.html
I am trying to create an archive like tar in linux without a compression. Everything works with smaller files, but when I try to compress larger files nothing happens.
This is the code that I have used.
bool FolderCompressor::compressFolder(QString sourceFolder, QString destinationFile)
{
QDir src(sourceFolder);
if(!src.exists())//folder not found
{
return false;
}
file.setFileName(destinationFile);
if(!file.open(QIODevice::WriteOnly))//could not open file
{
return false;
}
dataStream.setDevice(&file);
bool success = compress(sourceFolder, "");
file.close();
return success;
}
bool FolderCompressor::compress(QString sourceFolder, QString prefex)
{
QDir dir(sourceFolder);
if(!dir.exists())
return false;
//1 - list all folders inside the current folder
dir.setFilter(QDir::NoDotAndDotDot | QDir::Dirs);
QFileInfoList foldersList = dir.entryInfoList();
//2 - For each folder in list: call the same function with folders' paths
for(int i=0; i<foldersList.length(); i++)
{
QString folderName = foldersList.at(i).fileName();
QString folderPath = dir.absolutePath()+"/"+folderName;
QString newPrefex = prefex+"/"+folderName;
compress(folderPath, newPrefex);
}
//3 - List all files inside the current folder
dir.setFilter(QDir::NoDotAndDotDot | QDir::Files);
QFileInfoList filesList = dir.entryInfoList();
//4- For each file in list: add file path and compressed binary data
for(int i=0; i<filesList.length(); i++)
{
QFile file(dir.absolutePath()+"/"+filesList.at(i).fileName());
if(!file.open(QIODevice::ReadOnly))//couldn't open file
{
return false;
}
dataStream << QString(prefex+"/"+filesList.at(i).fileName());
dataStream << qCompress(file.readAll());
file.close();
}
}
return true;
}
I basically call compressFolder with source directory and destination compress file name.
Comments
Post a Comment