1. 同步执行版【先生成前一个文件,再生成后面的文件】
const fs = require(‘fs’);
const crypto = require(‘crypto’);
const fileSize = 100 * 1024 * 1024; // 文件大小为100MB
const chunkSize = 1024 * 1024; // 每次写入的数据块大小为1MB
const fileCount = 5; // 每次生成的文件个数
const outputDir = ‘output’; // 输出文件夹名
let progress = 0; // 当前生成进度
let fileIndex = 1; // 当前文件索引
// 创建输出文件夹
if (!fs.existsSync(outputDir)) {
fs.mkdirSync(outputDir);
}
// 生成指定大小的随机数据块
function generateRandomData(size) {
const buffer = Buffer.allocUnsafe(size);
for (let i = 0; i < size; i++) {
buffer[i] = Math.floor(Math.random() * 256);
}
return buffer;
}
// 计算MD5哈希值
function calculateHash(data) {
const hash = crypto.createHash(‘md5’);
hash.update(data);
return hash.digest(‘hex’);
}
// 生成文件
function generateFile() {
if (fileIndex > fileCount) {
console.log(‘所有文件生成完成!’);
return;
}
const fileName = output${fileIndex}.md5
;
const writeStream = fs.createWriteStream(${outputDir}/${fileName}
);
let currentProgress = 0; // 当前文件生成进度
// 生成数据并写入文件
function writeFile() {
if (currentProgress >= fileSize) {
writeStream.end();
console.log(文件${fileName}生成完成!
);
fileIndex++;
generateFile(); // 继续生成下一个文件
return;
}
const data = generateRandomData(chunkSize);
const hash = calculateHash(data);
writeStream.write(data, () => {
currentProgress += chunkSize;
const percent = Math.floor((currentProgress / fileSize) * 100);
console.log(`文件${fileName}生成进度:${percent}%`);
writeFile();
});
}
// 开始生成当前文件
console.log(开始生成文件${fileName}...
);
writeFile();
}
// 开始生成文件
console.log(开始生成${fileCount}个文件...
);
generateFile();
非同步执行【同时生成5个文件】
const fs = require(‘fs’);
const crypto = require(‘crypto’);
const fileSize = 100 * 1024 * 1024; // 文件大小为100MB
const chunkSize = 1024 * 1024; // 每次写入的数据块大小为1MB
const fileCount = 5; // 同时生成的文件个数
const outputDir = ‘output’; // 输出文件夹名
// 创建输出文件夹
if (!fs.existsSync(outputDir)) {
fs.mkdirSync(outputDir);
}
// 生成指定大小的随机数据块
function generateRandomData(size) {
const buffer = Buffer.allocUnsafe(size);
for (let i = 0; i < size; i++) {
buffer[i] = Math.floor(Math.random() * 256);
}
return buffer;
}
// 计算MD5哈希值
function calculateHash(data) {
const hash = crypto.createHash(‘md5’);
hash.update(data);
return hash.digest(‘hex’);
}
// 生成文件
async function generateFile(index) {
const fileName = output${index}.md5
;
const writeStream = fs.createWriteStream(${outputDir}/${fileName}
);
let progress = 0; // 当前生成进度
return new Promise((resolve, reject) => {
writeStream.on(‘finish’, () => {
console.log(文件${fileName}生成完成!
);
resolve();
});
writeStream.on('error', (error) => {
reject(error);
});
// 生成数据并写入文件
function writeFile() {
if (progress >= fileSize) {
writeStream.end();
return;
}
const data = generateRandomData(chunkSize);
const hash = calculateHash(data);
writeStream.write(data, () => {
progress += chunkSize;
const percent = Math.floor((progress / fileSize) * 100);
console.log(`文件${fileName}生成进度:${percent}%`);
writeFile();
});
}
// 开始生成当前文件
console.log(`开始生成文件${fileName}...`);
writeFile();
});
}
// 同时生成多个文件
async function generateFiles() {
const promises = [];
for (let i = 1; i <= fileCount; i++) {
promises.push(generateFile(i));
}
try {
await Promise.all(promises);
console.log(‘所有文件生成完成!’);
} catch (error) {
console.error(‘生成文件时出现错误:’, error);
}
}
// 开始生成文件
console.log(开始生成${fileCount}个文件...
);
generateFiles();