我想在Android设备上填充设备存储以进行测试。如我所读,有一种方法可以做到这一点(没有“归零”磁盘,这很耗时):
long bigSize = 1L * 1024L * 1024L * 1024L;
using (var fileStream = new FileStream(rootPath + "/DummyFile.txt", FileMode.Create, FileAccess.Write, FileShare.None))
{
long sizeH = bigSize;
long sizeL = 1L;
while (sizeH - sizeL > 1L)
{
try
{
fileStream.SetLength(sizeH);
fileStream.WriteByte(0);
fileStream.Flush();
Debug.Log("Length = " + sizeH);
sizeL = sizeH;
sizeH = sizeH * 2L;
}
catch (IOException)
{
Debug.Log("Catch length = " + sizeH);
sizeH = (sizeL + sizeH) / 2L;
}
}
}
在Windows上,此方法实际上可以在一秒钟内填满硬盘,因此您无法再向其中写入数据。
但是我需要在Android设备上填充磁盘存储,最好通过C#代码(Unity3d)。我知道,由于FAT32文件系统,Android上的最大文件大小为2GB,因此我对代码进行了一些修改。我尝试编写尽可能多的1GB文件(在我的示例中,可用磁盘空间为48 GB,因此我将文件数量限制为60):
try
{
for (int n = 0; n < 60; ++n)
{
using (var fileStream = new FileStream(rootPath + "/DummyFile" + n.ToString() + ".txt", FileMode.Create, FileAccess.Write, FileShare.None))
{
fileStream.SetLength(bigSize);
fileStream.WriteByte(0);
fileStream.Flush();
}
Debug.Log("Written big file " + n);
}
}
catch(IOException)
{
}
此方法写入所有60个文件(每个1 GB),我在资源管理器中看到所有这60个文件。但是-在磁盘属性中(在资源管理器中),我看到48 GB可用空间...我可以通过资源管理器复制这些文件之一-然后,我看到47 GB的可用空间。 我花了整整一天的时间试图了解,WTF正在继续...
三星Galaxy S8,Android 7.0