Корень карты памяти android. Где находится корневая папка флешки или карты памяти

Различную информацию в электронном виде можно сохранять на специальном устройстве, называемом картой памяти. Она предназначена для хранения текстовых документов, аудио и видеозаписей, изображений. Основное преимущество этого типа памяти заключается в простоте записи информации и компактности устройства наряду со значительными объемами сохраняемых данных.

Внутренняя память представлена оперативной, постоянной и кэш-памятью. К ее плюсам относят быстродействие, а минусом является ограниченный объем сохраняемых данных.

Очень часто современному пользователю персонального компьютера и прочей электронной техники приходится сталкиваться с таким предложением: «установить в корень карты памяти» или «скопировать в корень карточки». Оно может встретиться где угодно, так как современная техника все в большем объеме начинает поддерживать сторонние карты для увеличения внутренней памяти.

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

Сюда относятся ноутбуки, планшеты, смартфоны, цифровые фотоаппараты и даже PSP с прочими игровыми приставками. Поэтому для корректной работы с ними не обойтись без четкого представления о том, что может значить выражение «корень карты памяти» и где он может находиться.

Название места для сохранения данных на карточке происходит от английского слова root – «коренной, корень», обозначающего что-то первозданное, исконное. Оно вошло в употребление еще в самом начале, когда только стали появляться компьютеры. На них root-ом называли само содержание устройства, то есть то место, откуда запускалась система, и где можно было сохранять данные. По сути, в отношении нынешних карт памяти данное обозначение ничуть не изменилось.

Корневой каталог

Сегодня корнем карты памяти называют именно сам каталог, который размещен на карточке. Это та самая папка, которая запускается при нажатии на иконку с карточкой памяти в смартфоне или . Просто слово root было переведено дословно, и теперь используется именно его русский аналог для обозначения самой карты. Таким образом, если вас просят скопировать данные в корень, то вам не нужно создавать ничего дополнительного на карте памяти, а просто скопировать нужные файлы на нее саму, в корневой каталог.

Где находится корневая папка флешки или карты памяти?

    Если подключить любое запоминающее устройство к компьютеру, в Проводнике оно появится как диск с присвоенной ему английской буквой, если открыть этот диск, это и будет корневая папка. В ней можно создавать другие папки, в каждой из тех папок можно создавать в свою очередь другие папки и так далее, и в каждой папке находятся файлы. Это можно представить себе как дерево со стволом и отходящими от него ветвящимися ветками - папки - ветки, файлы - листочки, и корень этого дерева как раз и есть корневая папка, отсюда и название.

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

    Корневая папка любого диска - это главная папка данного диска.

    То есть когда ты находишься в корневой папке какого-либо диска, для тебя это выглядит как будто ты не в какую папку и не заходил.

    То есть адрес корневой папки такой:

    диски A: и B: обычно зарезервированы под дискетные дисководы (для флоппи-дисков), которые в современных компьютерах часто уже и не ставят.

    для жсткого диска это обычно C:

    часто для DVD-проигрывателя резервируется D:

    Остальные обычно используются для подключаемых внешних устройств.

    Например для флешки.

    Но это, по-моему, не обязательно они должны быть в таком порядке. У кого-то в компьютере может быть и другой порядок соответствия устройств наименованиям дисков. Войдите в раздел Мой компьютер (если у вас Windows) и вы увидите как это расположено у вас.

    Корневая папка сайта имеет такой адрес: http://sitename/

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

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

    Что же такое корневая папка и как туда попасть?

    На самом деле все очень просто, корневая папка - это папка которая считается изначальной. Если вы к примеру подключите вашу флешку в устройству, то вам выскочит меню, через которое вы можете зайти в корневую папку = это и есть сама флешка, в которой могут быть как папки так и файлы.

    Довольно часто можно услышать или встретить фразу: установите/переместите/скопируйте определенный файл в корень карты памяти или в корневую папку флеш-карты. А что же такое и где находится корневая папка или просто корень флешки?

    Ответ на самом деле очень прост. Такое название пошло от корневой директории. То есть, когда нажимаем на значок карты памяти/флеш-карты и перед нами открывается окно - это и есть та самая корневая папка. Хотя фактически папку мы там не видим. Это сама область карты с помещенными на ней другими файлами и прочими папками. Корневую папку (или корень) флешки можно сравнить с верхним этажом в иерархии всех папок на ней.

Потом появился Android Lollipop, а вместе с ним и новые фичи для работы с SD-картой. Появился SAF (Storage Acces Framework), появился новый Intent ACTION_OPEN_DOCUMENT_TREE , с помощью которого можно выбрать корень SD-карты и далее использовать в своих нуждах. На самом деле, SAF был еще на KitKat, но без этого Intent’a толку от него было немного, т.к для доступа к файлам на карте нужно было использовать Intent ACTION_OPEN_DOCUMENT , который, судя по названию, дает возможность юзеру выбрать файл, который он хочет редактировать, вручную через системный пикер. Окей, а если у пользователя 5000 файлов, будет ли он это делать? Нет.

Определение внешних накопителей на устройстве

Начну с самой больной темы в работе с карточками памяти. У нас в Android’e есть замечательный метод

File Environment.getExternalStorageDirectory()

Судя по названию, это то что нужно. «External» — переводится как «внешний», верно? Но полагаться на этот метод не стоит. Он может вернуть путь ко внутренней памяти, может к карте, но на каждом устройстве происходит по-разному. Такая ситуация сложилась во многом благодаря разным производителям телефонов и их модифицированным прошивкам и оболочкам. Я хочу сказать, что метод getExternalStorage() может возвращать путь не к реальной SD-карте, а к той, которую производитель считает внешним накопителем. Здесь возникает путаница в определениях. Внешний накопитель это не обязательно флэшка: на некоторых девайсах это внутренняя память, на некоторых действительно SD-карта. Точки монтирования карты могут быть любые:

  • /storage/extSdCard/
  • /storage/sdcard1/
  • /storage/sdcard0/
  • /mnt/external_sd/
  • /mnt/external/
  • /mnt/sdcard2/
  • /storage/sdcard0/external_sdcard/
  • /storage/removable/sdcard1/
  • /removable/microsd
  • /mnt/media_rw/sdcard1
  • /mnt/emmc

И это не является какой-то большой проблемой, пока не столкнешься с ней сам.

На StackOverflow есть множество тем, в которых куча самых разных вариантов определения флешки, начиная от перебора всех возможных комбинаций точек монтирования, попыток получения джавовых переменных среды System.getenv("EXTERNAL_STORAGE") , System.getenv("SECONDARY_STORAGE") и заканчивая парсингом системного файла /system/etc/vold.fstab . Эти способы работают, но каждый только в каком-то частном случае. Ни один способ не покрывает все устройства, либо не работает совсем. И если кажется, что все накопители определяются верно, то всегда найдется какой-нибудь девайс, карта на котором не определяется этими методами. Я перепробовал почти все методы.

Чтобы понять масштаб проблемы, скажу, что я разбирался с ней около четырех месяцев. Эта проблема существует примерно с 2011 года, но до сих пор нет точного решения. Какое то время я довольствовался вот этим более-менее рабочим кодом:

ArrayList allPaths = new ArrayList<>(); ArrayList sdPaths = new ArrayList<>(); for (File file: mContext.getExternalFilesDirs("external")) { if (file == null) { continue; } int index = file.getAbsolutePath().lastIndexOf("/Android/data"); if (index > 0) { String path = file.getAbsolutePath().substring(0, index); try { path = new File(path).getCanonicalPath(); } catch (Exception e) { e.printStackTrace(); } allPaths.add(path); if (!file.equals(mContext.getExternalFilesDir("external"))) { sdPaths.add(path); } }

Но и он давал сбои на некоторых устройствах. И в очередной раз, получив единицу в маркете, я отправился на поиски.

Мне не давал покоя системный андроидовский пикер (по совместительству файловый менеджер), в котором все накопители всегда верно определяются. Недолго думая, я вытащил системный apk с помощью Root’a и декомпилировал его.

Озарение

Я обнаружил, что пикер использует классы StorageVolume и StorageManager . Он проходит по всем элементам StorageVolume , полученным с помощью метода StorageManger.getVolumeList() и для каждого вызывает методы StorageVolume.getPath() и StorageVolume.getState() . Загвоздка в том, что эти методы скрыты. Они не private, но помечены аннотацией @hide . Ну что поделать, достаем свою рефлексию:

StorageManager getStorageManager() { return (StorageManager) mContext.getSystemService(Context.STORAGE_SERVICE); } /* Use reflection for detecting all storages as android do it probably doesn"t work with USB-OTG works only on API 19+ */ public List getAllPaths() { List allPaths = new ArrayList<>(); try { Class storageVolumeClass = Class.forName("android.os.storage.StorageVolume"); Method getVolumeList = getStorageManager().getClass().getMethod("getVolumeList"); Method getPath = storageVolumeClass.getMethod("getPath"); Method getState = storageVolumeClass.getMethod("getState"); Object getVolumeResult = getVolumeList.invoke(getStorageManager()); final int length = Array.getLength(getVolumeResult); for (int i = 0; i < length; ++i) { Object storageVolumeElem = Array.get(getVolumeResult, i); String mountStatus = (String) getState.invoke(storageVolumeElem); if (mountStatus != null && mountStatus.equals("mounted")) { String path = (String) getPath.invoke(storageVolumeElem); if (path != null) { allPaths.add(path); } } } } catch (Exception e) { e.printStackTrace(); } return allPaths; }

Возникает вопрос, почему нет никакого официального способа сделать это? Да, использовать рефлексию в боевом проекте не совсем надежно, но других вариантов нет: если система сама использует этот код, то он работает во всех случаях. Практика это подтверждает.

SAF (Storage Access Framework)

Официальная документация:

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

p>SAF агрегирует поставщиков контента (Подклассы класса DocumentProvider). Это, например, Google Диск, различные галереи и файловые менеджеры.

SAF выдает URI документов (файлов), которые обладают правами на запись, либо чтение. Можно сказать, что это такой слой над доступом к файлам. Сам по себе класс File ничего не знает о SAF.

p>Для того, чтобы получить возможность редактировать данные на карте, требуется получить URI корня SD-карты, который будет обладать правами на редактирование. Далее с помощью этого URI можно будет получить URI любого файла на карте памяти. Для этого нужно запустить системный пикер с помощью Intent ACTION_OPEN_DOCUMENT_TREE и попросить пользователя выбрать корень SD-карты (иначе ничего не получится!).

В картинках:


@TargetApi(Build.VERSION_CODES.LOLLIPOP) void showDocumentTreeDialog() { Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE); startActivityForResult(Intent.createChooser(intent, getString(R.string.permission_intent)), REQUEST_CODE_SD_CARD); }

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

TakePersistableUriPermission(Uri uri, int modeFlags)

c флагами на запись и чтение. После всех этих махинаций необходимо сохранить куда-нибудь полученный Uri SD-карты для дальнейшей работы с ним, например, в SharedPreferences .

@RequiresApi(api = Build.VERSION_CODES.KITKAT) @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == REQUEST_CODE_SD_CARD && resultCode == RESULT_OK && takePermission(getApplicationContext(), data.getData())) { //do your stuff } } @RequiresApi(api = Build.VERSION_CODES.KITKAT) private boolean takePermission(Context context, Uri treeUri) { /* Было бы полезно добавить проверку на то, что пришедший URI это URI карты. Оставлю эту задачу как упражнение читателям */ try { if (treeUri == null) { return false; } context.getContentResolver().takePersistableUriPermission(treeUri, Intent.FLAG_GRANT_WRITE_URI_PERMISSION | Intent.FLAG_GRANT_READ_URI_PERMISSION); sharedPreferences.putString(SD_CARD_URI,treeUri.toString()); return true; } catch (Exception e2) { e2.printStackTrace(); return false; } }

Взаимодействие с SD-картой

Читатель наверное уже догадывается, что по-нормальному взаимодействовать с файлами (вроде file.renameTo(file2)) мы не сможем. Если мы посмотрим в код метода file.renameTo(File) , то не увидим ничего подозрительного, никаких проверок. И правильно, потому что проверки находятся на уровне файловой системы. И если привычными средствами попробовать изменить файл, находящийся на SD-карте, то получим следующее исключение:

Java.io.IOException: Cannot make changes to file your_file.ext

Вот интересный способ определить — можно ли изменять файл:

Public boolean isFileWritable(File file) { boolean writable; try { new FileOutputStream(file, true).close(); writable = file.exists() && file.canWrite(); } catch (IOException e) { writable = false; } return writable; }

Если файл на карте, мы получим IOException .

Чтобы изменить файл на карте памяти, нам нужно получить DocumentFile , представляющий наш файл, но с правами записи, которые мы получили с помощью SAF.

В начале статьи я говорил о двух интентах для SAF: ACTION_OPEN_DOCUMENT_TREE и ACTION_OPEN_DOCUMENT . И я говорил, что мы не будем использовать второй интент, так как это принуждает юзера искать файл вручную. Но у нас есть URI, который мы получили с помощью первого интента и это значит… Нет, никакого стандартного API для получения DocumentFile нет, все ручками.

Алгоритм такой:

  1. У нас есть File
  2. Определяем имя накопителя, на котором находится этот файл
  3. Определяем путь файла относительно накопителя на котором он находится. Получаем строчку вида android/folder/file.txt
  4. Разделяем строчку символом «/»
  5. В цикле для каждой полученной части находим DocumentFile, представляющий этот путь, на основе DocumentFile для предыдущей части
  6. Если алгоритм завершился без ошибок, имеем на выходе DocumentFile, представляющий наш файл

Public DocumentFile getDocumentFile(File file) { DocumentFile document = null; String baseFolder = null; for (String path: getAllPaths()) { File filePath = new File(path); if (filePath.getAbsolutePath().startsWith(file.getAbsolutePath())) { baseFolder = filePath.getAbsolutePath(); break; } } if (baseFolder == null) { return null; } try { String relativePath = file.getCanonicalPath().substring(baseFolder.length() + 1); Uri permissionUri = Uri.parse(sharedPreferences.getString(SD_CARD_URI)); document = getDocumentFileForUri(permissionUri, relativePath); } catch (Exception e) { e.printStackTrace(); } return document; } /* Метод для получения DocumentFile (шаги 4-6) */ private DocumentFile getDocumentFileForUri(Uri treeUri, String relativePath) { String parts = relativePath.split("/"); if (parts.length == 0) { return null; } DocumentFile document = DocumentFile.fromTreeUri(mContext, treeUri); for (String part: parts) { DocumentFile nextDocument = document.findFile(part); if (nextDocument != null) { document = nextDocument; } } return document; }

FileOutputStream outputStream = (FileOutputStream) mContentResolver.openOutputStream(documentFile.getUri());

Пример копирования файла класса File в DocumentFile:

Public void copyFile(File sourceFile, DocumentFile document) { FileInputStream inputStream = null; FileOutputStream outputStream = null; try { inputStream = new FileInputStream(sourceFile); outputStream = (FileOutputStream) mContentResolver.openOutputStream(document.getUri()); FileChannel fileChannelIn = inputStream.getChannel(); FileChannel fileChannelOut = outputStream.getChannel(); fileChannelIn.transferTo(0, fileChannelIn.size(), fileChannelOut); //noinspection ResultOfMethodCallIgnored sourceFile.delete(); } catch (IOException e) { e.printStackTrace(); //noinspection ResultOfMethodCallIgnored sourceFile.delete(); } finally { try { if (inputStream != null) inputStream.close(); if (outputStream != null) outputStream.close(); } catch (IOException e) { e.printStackTrace(); } } }

И еще хочу сказать, что теперь код наполнится таким проверками

Public void writeFile(File file) { boolean fileWritable = isFileWritable(file); boolean hasSdCardUri = !sharedPreferences.getString(SD_CARD_URI).isEmpty(); if (fileWritable || hasSdCardUri) { /* можно редактировать файл обычно, либо SAF */ return; } if (Build.VERSION.SDK_INT >= 21) { /* добро пожаловать! (запрашиваем у юзера разрешение) */ throw new NoLollipopWritePermissionException(); ` } else if (Build.VERSION.SDK_INT == 19) { /* до свидания! (не можем редактировать) */ throw new NoKitkatWritePermissionException(); } }

Заключение

Надеюсь, что мой опыт, описанный в статье, поможет тем, кто еще не работал с SD-картой, избежать долгих исследований и поиска.

Думаю, что все сталкивались с проблемой злобных «авторанов». И есть много способов решения: СПО, скрипты, «танцы с бубном» и т.п. Я же хочу предложить простой алгоритм решения для пользователей OS Windows, который не требует сторонних вмешательств. Для достижения цели нам потребуется несколько шагов - точнее два.

Шаг №1 - подготовка

Форматирование файловой системы носителя в NTFS с помощью ОС.

При выборе вариантов форматирования нет NTFS

Если нет варианта форматирования файловой системы в NTFS, что имеет место быть на Windows XP, то делаем следующее:

  1. Заходим в свойства флешки;
  2. Переходим на вкладку «Оборудование;»
  3. Выбираем нашу флеш-карту и нажимаем кнопку свойства;
  4. Переходим на вкладку «Политика»;
  5. Выбираем вариант использования кэша;
  6. Принимаем изменения и форматируем в NTFS;
  7. Затем возвращаем обратно в «Быстрое удаление».

Шаг №2 - разграничение прав

Теперь создаем папку («рабочая папка») в корне и сразу задаем имя (в дальнейшем поменять имя папки невозможно), в ней и будет храниться вся информация. А вот в корень папки будет доступен только на чтение. Теперь разграничиваем права:
  1. Заходим в безопасность - открываем свойства флешки, вкладка «Безопасность»;

    Если нет такой вкладки, то делаем следующее

    1. Заходим в «Параметры папок», что в «Панели управления»;
    2. На вкладке вид в списке «Дополнительные параметры» находим параметр содержащий слова «общий доступ» и "(рекомендуется)";
    3. Снимаем галку.
    Теперь вкладка появилась
  2. Нажимаем кнопку «Дополнительно»;
  3. В открывшемся окне переходим на вкладку «Владелец» и нажимаем кнопку «Изменить»;

    Для XP

  4. Ставим галку «Заменить владельца подконтейнеров и объектов»;
  5. Выбираем себя и становимся владельцем объекта;
  6. Закрываем диалоговые окна по требованию ОС кнопкой «ОК» и затем опять открываем «безопасность» и «дополнительно»;
  7. Изменяем разрешения - для этого заходим в безопасность и на вкладке «Разрешения» нажимаем кнопку «Изменить разрешения» удаляем имеющиеся права;

    Для XP

    (в Windows XP нет кнопки «Изменить разрешения», там сразу действуем)

  8. Добавляем группу «Все» - нажимаем кнопки «Добавить», «Дополнительно», «Поиск», выбираем из списка группу «Все», «ОК», «ОК»;
  9. В открывшемся окне задаем параметры разрешений для группы «Все»:
    • «Применять: Для этой папки, ее подпапок и файлов»;
    • Устанавливаем следующие галки в поле «Разрешения»:
      1. Разрешить: «Полный доступ»;
      2. Запретить: «Смена владельца», «Смена разрешений», «Удаление», «Удаление подпапок и файлов», «Запись дополнительных атрибутов», «Запись атрибутов», «Создание папок / дозапись данных», «Создание файлов / запись данных».
  10. Принимаем изменения, переходим к ранее созданной папке в корне флеш-карты и проделываем почти те же операции;
  11. Смена владельца - по знакомой схеме;
  12. Удаление имеющихся прав путем снятия галки «Добавить разрешения, наследуемые от родительских объектов» на вкладке «Разрешения»;
  13. В появившемся диалоговом окне выбираем «Удалить»;
  14. Добавляем группу «Все» (уже знаем как) и задаем параметры разрешений:
    • «Применять: Для этой папки, ее подпапок и файлов» ;
    • Устанавливаем галку Разрешить: «Полный доступ».
  15. Опять добавляем группу «Все» и задаем параметры разрешений:
    • «Применять: Только для этой папки»;
    • Устанавливаем следующие галки «Запретить» в поле «Разрешения»:
      «Смена владельца», «Смена разрешений», «Удаление», «Запись дополнительных атрибутов», «Запись атрибутов»
Плюсы
+ В корне флеш-карты нет возможности создавать / удалять файлы и папки. Следовательно, закрыта лазейка для «авторанов».
+ В «рабочей папке» полный доступ - что хотим, то и воротим (ударение расставите сами).
+ Файловая система NFTS - для личного пользования в самый раз. (ИМХО)
Минусы
- Нет возможности воспользоваться пунктом меню «Отправить» для копирования информации на нашу флешку, т.к. корневой каталог закрыт для записи. Необходимо копировать в «рабочую папку».
- Нет возможности переименовать «рабочую папку» - в корне только чтение.
- Файловая система NTFS - не подходит для устройств читающих только FAT (муз./видео плееры, смартфоны, фото-камеры и т.п.).
Замечания
  • Данную операцию лучше проводить на «здоровой машине». А то можно сотворить immortal-autorun;
  • НА Windows XP у меня при попытке удалить «рабочую папку» она оставалась (так и должно быть), но внутри всё удалялось;
  • Зато на Window 7 все файлы при попытке удаления «рабочей папки» остаются;
  • Внутри «рабочей папки» не спасает от вредоносных программ, которые создают exe"шник с именем папки при ее открытии.

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

Происхождение и значение корня карты памятиРазличную информацию в электронном виде можно сохранять на специальном устройстве, называемом картой памяти.

Она предназначена для хранения текстовых документов, аудио и видеозаписей, изображений. Основное преимущество этого типа памяти заключается в простоте записи информации и компактности устройства наряду со значительными объемами сохраняемых данных.Внутренняя память представлена оперативной, постоянной и кэш-памятью. К ее плюсам относят быстродействие, а минусом является ограниченный объем сохраняемых данных.Очень часто современному пользователю персонального компьютера и прочей электронной техники приходится сталкиваться с таким предложением: «установить в корень карты памяти» или «скопировать в корень карточки». Оно может встретиться где угодно, так как современная техника все в большем объеме начинает поддерживать сторонние карты для увеличения внутренней памяти.Карты памяти стандартизированы. Они имеют определенные габаритные размеры и расположение площадок контактов в зависимости от типа устройств, для использования на которых они предназначаются. Сюда относятся ноутбуки, планшеты, смартфоны, цифровые фотоаппараты и даже PSP с прочими игровыми приставками. Поэтому для корректной работы с ними не обойтись без четкого представления о том, что может значить выражение «корень карты памяти» и где он может находиться.Название места для сохранения данных на карточке происходит от английского слова root – «коренной, корень», обозначающего что-то первозданное, исконное. Оно вошло в употребление еще в самом начале, когда только стали появляться компьютеры. На них root-ом называли само содержание устройства, то есть то место, откуда запускалась система, и где можно было сохранять данные. По сути, в отношении нынешних карт памяти данное обозначение ничуть не изменилось. Корневой каталогСегодня корнем карты памяти называют именно сам каталог, который размещен на карточке. Это та самая папка, которая запускается при нажатии на иконку с карточкой памяти в смартфоне или нетбуке. Просто слово root было переведено дословно, и теперь используется именно его русский аналог для обозначения самой карты. Таким образом, если вас просят скопировать данные в корень, то вам не нужно создавать ничего дополнительного на карте памяти, а просто скопировать нужные файлы на нее саму, в корневой каталог.



 

Пожалуйста, поделитесь этим материалом в социальных сетях, если он оказался полезен!