То же место доступно после удаления файла - PullRequest
1 голос
/ 26 июня 2019

У меня проблемы с получением доступного места.Вскоре я пишу файл и после того, как я его удаляю, но доступное пространство остается неизменным до и после удаления.Как вы можете видеть в следующих журналах.

> 2019-06-26 12:39:42.209 D/RemoveOne: before delete, space is:23220
> 2019-06-26 12:39:42.209 D/RemoveOne: before delete, file path
> /storage/emulated/0/one , exists true , file length 13599232
> 2019-06-26 12:39:42.231 D/RemoveOne: after delete, file path
> /storage/emulated/0/one, exist false, file length 0 2019-06-26
> 12:39:42.232 D/RemoveOne: after delete, space is: 23220

Записать файл со следующим кодом:
!!! Пожалуйста, будьте осторожны , он создает файл для заполнения всего пространства, не запускайте в противном случае вы знаете, каковы последствия.Я уничтожаю процесс, когда у моего файла есть необходимое мне количество.

String[] command = {
         "/system/bin/sh",
         "-c",
         "tr '\\0' '\\377' < /dev/zero | dd of=" + path + "/one" }; 
process = Runtime.getRuntime().exec(command); process.waitFor();

И методы, которые я пробовал для доступного пространства, оба отображают одно и то же: Вариант 1:

long meg = new StatFs(Environment.getExternalStorageDirectory().getPath()).getAvailableBytes();
long megAvailable = meg / (1024 * 1024);
return megAvailable;

Вариант 2:

StatFs stat = new StatFs(Environment.getExternalStorageDirectory().getPath());
long bytesAvailable;
bytesAvailable = stat.getBlockSizeLong() * stat.getAvailableBlocksLong();
long megAvailable = bytesAvailable / (1024 * 1024);
return megAvailable;

Методы, использованные для удаления, оба результата одинаковы: Вариант 1:

String path = Environment.getExternalStorageDirectory().getAbsolutePath();
final File file = new File(path + "/one");
Log.d(TAG, "before" + getFreeMemory());
Log.d(TAG, "before" + file.getAbsolutePath() + " " + file.exists() + " " + file.length());
process = Runtime.getRuntime().exec("rm " + path + "/one");
process.waitFor();
Log.d(TAG, "after" + file.getAbsolutePath() + " " + file.exists() + " " + file.length());
Log.d(TAG, "after" + getFreeMemory());

Вариант 2:

 String path = Environment.getExternalStorageDirectory().getAbsolutePath();
 File file = new File(path + "/one");
 Log.d(TAG, "before" + getFreeMemory());
 Log.d(TAG, "before" + file.getAbsolutePath() + " " + file.exists() + " " + file.length());
 file.delete();
 Log.d(TAG, "after" + file.getAbsolutePath() + " " + file.exists() + " " + file.length());
 Log.d(TAG, "after" + getFreeMemory());

Почему это пространството же самое после удаления?

ОБНОВЛЕНИЕ: Я пытался записать файл напрямую с определенным размером ... 10 МБ ...

String[] command = {
           "/system/bin/sh",
           "-c",
           "tr '\\0' '\\377' < /dev/zero | dd of=" + path + "/one bs=1 
           count=10000000"
 };
process = Runtime.getRuntime().exec(command);
process.waitFor();

И после удаления пространство распознается правильно.Поэтому я считаю, что метод onDestroy, который я вызывал, чтобы прекратить запись в файл определенного размера, не освобождает файл ... Я сейчас пытаюсь по этому пути проверить, удовлетворяет ли он моим требованиям ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...