大檔案切割工具
阿新 • • 發佈:2018-12-27
大檔案切割工具
往往超大型的日誌檔案,開啟會非常慢或者無法開啟,導致無法檢視日誌資訊,不方便除錯的開展。
下面介紹自己編寫的大檔案切割程式,程式比較簡單,使用Qt,C和C++,能夠處理2.1G以上的大檔案,適合初學者閱讀。下面貼程式碼:
#include <stdio.h>
#include <QString>
#include <QFileInfo>
#include <string>
#include <windows.h>
using namespace std;
int main(int argc, char *argv[])
{
char bigFilePath[1024];
int detachedFileCount = 2;
printf("請按照格式輸入引數(大檔案路徑 分割後文件數量),注:不支援中文路徑\n");
scanf("%s", bigFilePath);
scanf("%d", &detachedFileCount);
string bigFileAbsolutePath = string(bigFilePath);//大檔案的絕對路徑
//處理檔案字尾
unsigned sybmolIndex = bigFileAbsolutePath.find_last_of(".");//字尾下標
string prefixPath = bigFileAbsolutePath.substr(0, sybmolIndex);//字首
string subfixPath = bigFileAbsolutePath.substr(sybmolIndex);//字尾
//開啟檔案
FILE *file = fopen(bigFileAbsolutePath.c_str(), "r");
if (file == NULL)
{
printf("檔案開啟失敗!!");
return 0;
}
QFileInfo fileInfo(QString::fromStdString(bigFileAbsolutePath));
long long originalFileSize = fileInfo.size();
long long detachedFileSizeMax = originalFileSize / detachedFileCount;
//開始將大檔案分解為小檔案
for (int i = 1; i <= detachedFileCount; ++i)
{
char c[2];
itoa(i, c, 10);
string newFilePath = prefixPath + c + subfixPath;
FILE *newFile = fopen(newFilePath.c_str(), "w");
if (newFile == NULL)
{
printf("檔案開啟%s失敗", newFilePath.c_str());
return 0;
}
long long currentFileSize = 0;
while (currentFileSize <= detachedFileSizeMax && !feof(file))
{
char line[1024];
fgets(line, 1024, file);
fputs(line, newFile);
currentFileSize += string(line).length();
}
fflush(newFile);
fclose(newFile);
printf("生成%s成功!\n", newFilePath.c_str());
}
printf("檔案已全部寫入");
Sleep(1000);
return 0;
}
建立Qt工程,直接將程式碼複製到main.cpp中即可執行。專案工程,exe執行檔案無法釋出,有需要的私信。
#include <QString>
#include <QFileInfo>
#include <string>
#include <windows.h>
using namespace std;
int main(int argc, char *argv[])
{
int detachedFileCount = 2;
printf("請按照格式輸入引數(大檔案路徑 分割後文件數量),注:不支援中文路徑\n");
scanf("%s", bigFilePath);
scanf("%d", &detachedFileCount);
string bigFileAbsolutePath = string(bigFilePath);//大檔案的絕對路徑
//處理檔案字尾
unsigned sybmolIndex = bigFileAbsolutePath.find_last_of(".");//字尾下標
string prefixPath = bigFileAbsolutePath.substr(0, sybmolIndex);//字首
//開啟檔案
FILE *file = fopen(bigFileAbsolutePath.c_str(), "r");
if (file == NULL)
{
printf("檔案開啟失敗!!");
return 0;
}
QFileInfo fileInfo(QString::fromStdString(bigFileAbsolutePath));
long long originalFileSize = fileInfo.size();
long long detachedFileSizeMax = originalFileSize / detachedFileCount;
for (int i = 1; i <= detachedFileCount; ++i)
{
char c[2];
itoa(i, c, 10);
string newFilePath = prefixPath + c + subfixPath;
FILE *newFile = fopen(newFilePath.c_str(), "w");
if (newFile == NULL)
{
printf("檔案開啟%s失敗", newFilePath.c_str());
return 0;
}
long long currentFileSize = 0;
while (currentFileSize <= detachedFileSizeMax && !feof(file))
{
char line[1024];
fgets(line, 1024, file);
fputs(line, newFile);
currentFileSize += string(line).length();
}
fflush(newFile);
fclose(newFile);
printf("生成%s成功!\n", newFilePath.c_str());
}
printf("檔案已全部寫入");
Sleep(1000);
return 0;
}
建立Qt工程,直接將程式碼複製到main.cpp中即可執行。專案工程,exe執行檔案無法釋出,有需要的私信。