首页 > 解决方案 > 如何在 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

标签: c#androidstorage

解决方案


推荐阅读