将const模式写入特定大小的文件

时间:2017-11-15 15:45:51

标签: c++ io fstream binaryfiles

我需要编写将打开二进制文件的C ++代码,并编写5 MB的' 1'在它。

目前我的代码是:

#define BYTES_BUFFER_SIZE_5MB (1024*1024*5)

static char buffer[BYTES_BUFFER_SIZE_5MB];
memset(buffer, 0xff, BYTES_BUFFER_SIZE_5MB);
ofstream myFile ("data.bin", ios::out | ios::binary);
myFile.write(buffer, BYTES_BUFFER_SIZE_5MB);

是否有类似memset的方法来写入文件,所以我可以避免使用缓冲区?

3 个答案:

答案 0 :(得分:2)

我认为我们可以使用流操纵器在一行中执行此操作:

int

这样我们就没有涉及缓冲区了。唯一的风险是如果你想写很多字节,你可能会在setw的电话上溢出$sql="SELECT image,image1,image2,image3,image4,image5 FROM `app_places` where place_id='".$place_id."' "; $check= mysqli_query($conn, $sql); $rowcount=mysqli_num_rows($check); //var_dump($rowcount); if($rowcount<=0) { $minfo = array("success"=>'false',"msg"=>'invalid place_id'); $jsondata = json_encode($minfo); print_r($jsondata); exit(); } else { $data = array(); while ($row = mysqli_fetch_array($check,MYSQLI_NUM)) { $data[] = $row; }

答案 1 :(得分:0)

您可以使用较小的缓冲区并使用JButton jbtnStart = new JButton("Start"); JButton jbtnStop = new JButton("Stop"); 循环多次写入。

如果你必须写5Mb,你可以做类似的事情

for

注意 #define BYTES_SIZE_5MB (5242880) // Bathsheba comment have to be considered #define BUFFER_SIZE (1024) // Chunk size to be written (this is an arbitrary amount) static char buffer[BUFFER_SIZE]; ofstream myFile ("data.bin", ios::out | ios::binary); int i, repetitions = BYTES_SIZE_5MB / BUFFER_SIZE; memset(buffer, 0xff, BUFFER_SIZE); for (i=0; i < repetitions; ++i) myFile.write(buffer, BYTES_BUFFER_SIZE_5MB); myFile.close(); 方法可能变得非常慢,最好选择更大的块大小,这样您就可以减少write()次呼叫,这提高了程序的速度

答案 2 :(得分:0)

它并不简单,但您可以使用memory-mapped files。它们完全按照您的要求提供 - 您可以将文件写入,就像您正在写入内存一样。

每个(流行的)操作系统都有不同的API,但有一些库提供便携式支持。