#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; }