c# - 如何在 Android 设备上填充设备存储空间
问题描述
我想在 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正在进行......
三星盖乐世 S8,安卓 7.0
解决方案
推荐阅读
- powershell - ComboBox.SelectedItem 为空
- php - 从图像标题获取 WordPress 库图像描述
- python - 如何使用pdfrw在reportlab中设置图像的位置?
- android - 如何修复:Android 设备上的“QNetworkReply::SslHandshakeFailedError”
- mongodb - 将嵌套的 JSON 文档导入 Elasticsearch 并使其可搜索
- typescript - TypeScript 为“as X”定义接口
- c++ - 如何使检查字母(上和下)和()+ - * /的O(n)函数进行尾递归?
- xml - 从 xml 中删除多个节点
- javascript - 从一张表中获取日期时间并将其存储在另一张表中
- docker - 尝试使用 .Net Core 3.0 SDK(preview5)在 DevOps 管道中构建时抛出异常“错误 MSB3024:无法复制文件...”