initial commit
This commit is contained in:
@@ -0,0 +1,59 @@
|
||||
#include "sgu_stdafx.h"
|
||||
#include "sgu_mode_gen_rand_file.h"
|
||||
#include "sgu_utils.h"
|
||||
|
||||
bool generateRandomFile(size_t minSize, size_t maxSize, const char* outputFilename)
|
||||
{
|
||||
if (!outputFilename || !*outputFilename) {
|
||||
printf("Error: Output filename is not specified.\n");
|
||||
return false;
|
||||
}
|
||||
if (minSize > maxSize) {
|
||||
printf("Error: Min size cannot be greater than max size.\n");
|
||||
return false;
|
||||
}
|
||||
if (maxSize - minSize >= 2ULL * 1024ULL * 1024ULL * 1024ULL) {
|
||||
printf("Error: Size range is too large(>2GB). Please specify a smaller range.\n");
|
||||
return false;
|
||||
}
|
||||
|
||||
size_t fileSize = randomInRange(minSize, maxSize);
|
||||
|
||||
FILE* file = nullptr;
|
||||
fopen_s(&file, outputFilename, "wb");
|
||||
if (!file) {
|
||||
printf("Error: Cannot open output file %s for writing.\n", outputFilename);
|
||||
return false;
|
||||
}
|
||||
|
||||
const size_t kMaxBufSize = 1 * 1024 * 1024; // 1 MB
|
||||
uint8_t* buffer = new uint8_t[kMaxBufSize];
|
||||
if (!buffer) {
|
||||
fclose(file);
|
||||
printf("Error: Memory allocation failed for buffer.\n");
|
||||
return false;
|
||||
}
|
||||
|
||||
size_t remainSize = fileSize;
|
||||
|
||||
while (remainSize > 0)
|
||||
{
|
||||
size_t chunkSize = (remainSize > kMaxBufSize) ? kMaxBufSize : remainSize;
|
||||
// Fill the buffer with random data
|
||||
fillRandomData(buffer, chunkSize);
|
||||
|
||||
// Write the buffer to the file
|
||||
if (fwrite(buffer, 1, chunkSize, file) != chunkSize)
|
||||
{
|
||||
fclose(file);
|
||||
delete[] buffer;
|
||||
printf("Error: Failed to write to output file %s.\n", outputFilename);
|
||||
return false;
|
||||
}
|
||||
remainSize -= chunkSize;
|
||||
}
|
||||
fclose(file);
|
||||
delete[] buffer;
|
||||
printf("Random file generated successfully: %s (%s)\n", outputFilename, sizeToString(fileSize).c_str());
|
||||
return true;
|
||||
}
|
||||
Reference in New Issue
Block a user