2

私はこのコミュニティに不慣れで、iOS 開発にも不慣れです。誰かがちょっとした問題で私を助けてくれることを願っています...

現在、私は自分用の小さなアプリを作成しています。これは、ダミーのデータや単語、またはそれが大きくするものを含む、非常に大きなダミー ファイルを作成する必要があります。

その理由は、ボタンをクリックしたいのですが、アプリは4 GBのファイルを生成してディスクに保存する必要があり、無料ではないため、他のアプリはそれを使用できません... 4 GBの空き容量が必要な場合、小さなアプリを開くだけで、別のボタンをクリックするとファイルが削除され、4 GBの空きディスク容量が得られます...

ファイルをディスクに書き込む方法は知っていますが、大量のデータを短時間で生成して 4 GB 以上にする方法がわかりません。

for ループなどでこのような大きなファイルを生成する方法を知っている人はいますか?

4

5 に答える 5

2

4GBのディスク容量を占有したいだけの場合は、ファイルを作成し、4GBをシークして、1バイトを書き込みます。これにより、次の時間に次のデータを含む「スパースファイル」が作成されます。

これはCです:

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>

...

int fd = open("/path/to/file", O_WRONLY, 0644);
if (fd >= 0)
{
    lseek(fd, 4 * 1024 * 1024 * 1024, SEEK_SET);
    write(fd, &fd, 1);
    close(fd);
}

EDITファイルモードを指定できるように削除されましたcreat()open()

また、エラーチェックは示されているよりも優れているはずです...

于 2013-03-07T14:11:22.480 に答える
1

Cで段階的に書くことができます:

// a starting point:
const char path[] = "somewhere";
const size_t NBytesInBuffer = 1024;
/* fill buffer, if you like */
const char buffer[NBytesInBuffer] = {0};
FILE* const file = fopen(path, "w+");
assert(file);
const size_t ElementSize = sizeof(buffer[0]);

uint64_t nBytesWritten = 0;
while (UINT32_MAX > nBytesWritten) {
    nBytesWritten += ElementSize * fwrite(buffer, ElementSize, NBytesInBuffer, file);
}

fclose(file);

ここではメモリ消費は問題になりません。もちろん、I/O バウンドであるため、ファイル全体を書き込むには時間がかかります。いつか実際のデータも必要になるでしょう:)

于 2013-03-07T14:12:56.770 に答える
1

NSMutableDataオブジェクトを作成し、それを使用-setLength:して 4GB に拡張できます。(-setLengthはゼロで埋められます)、ファイルに書き出す前に。

NSMutableDataただし、iOS がそのような大きなオブジェクトにどれだけうまく対処できるかはわかりません。

編集:例:

NSString *filename; // The location to save your file
NSMutableData *data = [[NSMutableData alloc] init];
[data setLength:4*1024*1024*1024];
[data writeToFile:fileName atomically:NO];

デバイスの使用可能なストレージが少ない場合、iOS は特定のディレクトリにあるアプリのデータを消去することにも注意してください。

于 2013-03-07T14:06:16.067 に答える
1

ウィンドウズ:

コマンドシェルを開きます - cmd 1mbのファイルを作成するために次のコマンドを実行します

fsutil file createnew ./test.tmp 1048576

Linux:

変換およびコピー コマンドを使用する - dd

dd if=/dev/zero of=test.tmp bs=1M count=1

OS X & Solaris:

mkfile 1m test.tmp
于 2015-12-15T20:28:37.297 に答える
0

1024ではなく1000でざっくり計算すると

 4 gb 
 4000 mb
 4000000 kb 
 4000000000 b 
32000000000 bits

そして正確には34359738368ビットになります

そしてそれだけの文字数(abcなど)をテキストファイルに書き込んでいくと、ループで4GBのファイルができてしまいます。

于 2013-03-07T14:04:49.247 に答える