Что такое обработка файлов

Обновлено: 06.07.2024

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

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

· создание файла, т.е. ввод данных в новый или в существующий файл;

· анализ файла, т.е. просмотр (чтение) всего содержимого файла и вычисление некоторых интегральных характеристик или показателей этого содержимого;

· сортировка файла, предполагающая упорядочение записей файла по заданному логическому критерию, зависящему от содержания записей;

· коррекция файла, т.е. изменение содержимого файла либо путем обновления записей, либо коррекции по некоторым глобальным критериям (например, удаление "лишних" записей);

· поиск и выборка данных по некоторым логическим критериям содержимого записей файла;

· печать файла, т.е. вывод файла на принтер или на экран в заданном формате размещения информации из записей файла;

2. Создание файла.

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

Следующий пример программы иллюстрирует простой алгоритм создания типизированного файла с некоторыми процедурами контроля. Он является модификацией рассмотренного ранее примера программы работы с массивом записей о группе студентов (см. Лекцию 16), в которой массив заменен файлом записей.

program create_file;

uses CRT;

type stud =record num:byte;name:string[16];average:real end;

gr_st=file of stud;

BEGIN clrscr; repeat write('Имя файла: ');readln(nm);

if nm='' then halt;assign(gr,nm);s:='Y';

reset(gr); if IOResult<>0 then

begin write('Открыть новый файл ', nm, '?(Y/N)');

readln(s); if upcase(s)='Y' then

begin rewrite(gr); if IOResult<>0 then

begin writeln('Диск недоступен!');nm:= '' end;

end else nm:='';

end until nm<>'';numb:=0;if upcase(s)='Y' then

begin seek(gr,filesize(gr));numb:=filesize(gr) end;

writeln('Всего записей в файле:',numb, '. Введите очередную запись:');

with st do repeat repeat writeln('Фамилия,инициалы ','Cредний балл');

readln(name,average);if(average<2)or(average>5) then

writeln('Ошибка! Повторите ввод последней записи');

until(average>=2)and(average<=5);inc(numb);num:=numb; write(gr,st);write('Ввод следующей записи?(y/n)');readln(s);

until upcase(s)<>'Y';close(gr);if numb=0 then erase(gr);

writeln('Всего записей в файле ',nm,' ',numb);




3. Анализ текстовых файлов.

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

program volume;

uses CRT, DOS;

var total:pathstr;str:dirstr;fn:namestr;fr:extstr;

procedure setdisc;

var c:string;

begin writeln(' Установите дискету с файлом ', fn,' и нажмите enter');

if IOResult<>0 then begin writeln(' Файл ',fn,' не найден!');readln;halt end;

procedure checknm;

var i:byte;digit:set of '0'..'9';

begin if str <>'' then

begin for i:=1 to length(str) do if not (str[i] <>' ') then

if (str[i]='-') and (str[i+1] in digit) then str:='';

end;

BEGIN page:=1;symb:=0;a:=0;alfa:=false;beta:=false;

writeln(' Введите полное имя анализируемого файла:');

reset(ft); if IOResult<>0 then

begin for j:=(length(total)-length(fn)-length(fr)) downto 1 do

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

ZANS Renaming files

Утилита ZANS Renaming files сэкономит время, если вам необходимо срочно переименовать большое количество файлов по однотипному шаблону. Она интегрируется в оболочку Проводника и добавляет в контекстное меню свою команду, избавляя, таким образом, от необходимости использовать сторонние программы.

Программа позволяет переименовывать имя и расширение файла. Она поддерживает шаблонные операции трех типов:

? а.jpg — все выделенные файлы переименуются в a.jpg, a1.jpg, а2.jpg и т.д.;

? s*.bmp — названия файлов будут начинаться с буквы s, а далее будет добавлено исходное имя файла:

? h.* — расширения файлов останутся прежними, но им будут присвоены имена h1, h2, h3 и т.д.

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

Better File Series

Программный пакет Better File Series, содержащий три плагина, расширяет возможности Проводника по обработке большого количества файлов. Самый простой плагин, входящий в состав этого пакета, — Better File Select — позволяет выбирать файлы по имени или расширению. Дополнить и сузить выбор можно, используя различные подстановочные знаки (например, таким образом: программ*.doc) или часто встречаемые символы. С помощью плагина Better File Rename, имеющего простой интерфейс и широкие функциональные возможности, можно легко переименовать большое количество файлов по заданным параметрам. Окно последнего плагина — Better File Attributes — показано на рис. 3.3. Плагин предназначен для изменения атрибутов файла.


Рис. 3.3. Окно плагина Better File Attributes

Интерфейс программы Better File Series интуитивно понятен. Данный пакет пригодится вам, если вы часто работаете с файлами разных типов или занимаетесь структурированием и каталогизацией данных. Для пользователей, которые хотели бы поработать, например, только с одним из плагинов, на домашней веб-странице программы предусмотрены ссылки на закачку каждого плагина по отдельности.

Search and Replace

Пользователи, постоянно работающие с большим количеством документов, часто сталкиваются с ситуацией, когда требуется заменить определенный участок текста сразу в нескольких файлах. Назначение утилиты Search and Replace — как раз автоматизация этой рутинной операции.

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

Пример: последовательная обработка файлов с использованием метода отображения

Пример: последовательная обработка файлов с использованием метода отображения Программа atou (программа 2.4) иллюстрирует последовательную обработку файлов на примере преобразования ASCII-файлов к кодировке Unicode, приводящего к удвоению размера файла. Этот случай является

Глава 13 Расширенная обработка файлов

Глава 13 Расширенная обработка файлов В Linux файлы применяются при решении большого количества задач, среди которых, например, хранение долговременных данных, организация сетей с помощью сокетов и доступ к устройствам посредством файлов устройств. Разнообразие

5. Обработка

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

6.10. Обработка файлов

6.10. Обработка файлов Предикаты для изменения текущего входного и текущего выходного потоков данных были введены в гл. 5. Здесь мы резюмируем наши знания о каждом из этих предикатов.see(X)Этот предикат открывает файл X, если он еще не открыт, и определяет, что текущим входным

2.5. Построчная обработка

2.5. Построчная обработка Строка в Ruby может содержать символы новой строки. Например, можно прочитать в память файл и сохранить его в виде одной строки. Применяемый по умолчанию итератор each в этом случае перебирает отдельные строки:str = "Когда-то давным-давно. Конец "num =

2.6. Побайтовая обработка

2.6. Побайтовая обработка Поскольку на момент написания этой книги язык Ruby еще не поддерживал интернационализацию в полной мере, то символ и байт — по существу одно и то же. Для последовательной обработки символов пользуйтесь итератором each_byte:str = "ABC"str.each_byte <|char| print char, " "

13.1.5. Обработка исключений

13.1.5. Обработка исключений Что произойдет, если в потоке возникнет исключение? Как выясняется, поведение можно сконфигурировать заранее.Существует флаг abort_on_exception, который работает как на уровне класса, так и на уровне экземпляра. Он реализован в виде метода доступа (то

Пример 10-4. Обработка списка файлов в цикле for

Условная обработка

Условная обработка В XSLT имеются две инструкции, которые поддерживают условную обработку — xsl:if и xsl:choose. Инструкция xsl:if позволяет создавать простые условия типа "если-то", в то время как xsl:choose создает более сложную конструкцию для выбора одной из нескольких имеющихся

Обработка текстовых файлов.

Обработка текстовых файлов. Часто PGP используется для кодирования электронной почты, которая чаще всего представляет собой текст. Проблема текстовых файлов заключается в том, что на разных машинах текст представляется по-разному; например в MS-DOS все строки заканчиваются

3.1.4 Обработка ошибок

7.3.4 Обработка Ошибок

7.3.4 Обработка Ошибок Есть четыре подхода к проблеме, что же делать, когда во время выполнения универсальное средство вроде slist сталкивется с ошибкой (в С++ нет никаких специальных средств языка для обработки ошибок):1. Возвращать недопустимое значение и позволить

Обработка файлов

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

Обработка САС

Обработка САС Как только инициализация закончена, обрабатывается один или несколько списков САС. Обработка выполняется до тех пор, пока либо не выяснится, что сертификат аннулирован, либо не будут проверены все списки САС, указанные в дополнении проверяемого


Начнем с точки входа в приложение. Чтобы инструмент удобно было использовать, напишем приложение с командным интерфейсом. Перед началом работы также стоит создать переменное окружение и активировать его.

Для обработки параметров командной строки в Python есть удобный модуль click (установка pip install click). Обработка аргументов командной строки происходит при помощи добавления к функции декораторов. Определим обязательные параметры: search_path — путь по которому будем искать, либо файл с путями и дополнительные: режим исполнения программы (многопоточный или без), имя файла с результатами, формат записи результата (excel, csv, sqlite) и другие параметры по вашему желанию.

Функцию поиска содержимого будем вызывать из функции main(). В данном случае вызов выглядит следующим образом:

Совершим настройку логирования для сохранения информации о произошедших при исполнении скрипта ошибок. Для этого прекрасно подходит встроенный модуль logging. Информация будет записываться в файл лога.

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

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

Функции для обработки считывают данные из файлов и записывают в список словарей с ключами идентификатор, имя ресурса, путь. Словари очень хорошо подходят для написания красивого кода и возможности избавиться от множественных проверок условий.
Каждая функция принимает два параметра список для хранения результатов и путь к файлу с данными.
Также не стоит забывать обрабатывать параметры командной строки – пользователь может ввести их неправильно. Посмотрим обработку на примере аргумента search_type:

Теперь, когда имеется словарь с функциями для заполнения списка входных данных из файлов с разными форматами заполнение списка будет выглядеть довольно просто:

Многопоточность и обработка частями

Чтобы наше приложение могло использовать как можно больше вычислительных ресурсов добавим многопоточность при помощи ThreadPoolExecutor из стандартной библиотеки. Для отображения прогресса работы программы используем tqdm (pip install tqdm).

Результаты поиска будем записывать в датафрейм модуля pandas (pip install pandas). В процессе поиска будем сохранять промежуточные результаты, на случай если что-то пойдёт не так и скрипт завершит работу.

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

Обработка файлов и архивов

Для обработки результатов напишем функцию-генератор, возвращающий результаты обработки и использующую функцию os.walk для рекурсивного обхода по файлам:

Для работы с файлами и поиска по ним используется отдельный класс:

Обработку файла реализуем при помощи метода process() класса File.

Отдельно стоит упомянуть, что при обработке архивов разных форматов их прийдётся извлекать во временные папки и обрабатывать. Конечно, как вариант, можно использовать отдельные модули для обработки архивов разного формата (есть стандартные модули zip, tarfile остальные нужно устанавливать), но для задач, в каких целях применялся разработанный инструмент, требовалась обработка rar формата. В данном случае будет использоваться модуль patoolib (pip install patool).

Также при обработке архивов стоит учесть, что внутри могут находиться другие архивы. Поэтому извлекать архивы стоит рекурсивно. Класс для обработки архивов представлен ниже:

Для хранения результатов поиска удобно организовать отдельный класс.

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

При обработке текстовых файлов нам помогут средства стандартной библиотеки Python, табличных – модули pandas, pyexcel, xlrd ; файлов Word – модули docx2txt, win32com/пакет LibreOffice; rtf –модуль striprtf; pdf файлов – модуль pdfminer.

Поиск по содержимому

Для поиска информации воспользуемся модулем re. Если нужно искать данные по каким-то конкретным шаблонам, как в случае с задачей для которых использовался инструмент, определим их отдельно в переменной SEARCH_REGEXPS.

Обработка результатов

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

Для записи в базу данных воспользуемся модулями sqlalchemy, pymssql, pandas. Настройки для подключения будем хранить в отдельном файле или переменных среды. Код для записи в БД выглядит следующим образом.

Вот так будет выглядеть результат:


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

файловая система и javascript

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

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

Данную тему можно разделить на три части: прошлое, настоящее и будущее.

Прошлое. ActiveX

В прошлом существовало только два браузера: Netscape и IE. Однажды Microsoft решил порадовать пользователей IE и добавил невероятную для того времени функциональность, которая позволяла коду, написанному на языке JavaScript, обмениваться информацией с операционной системой Windows. Данный способ получил название ActiveX.

Описанная технология может применяться даже сегодня в последней версии браузера IE (по умолчанию, ActiveX отключен). Не будем долго останавливаться на этой теме, поскольку ActiveX актуален только для IE, и пользователю необходимо проделать много необычных действий со своим браузером для того, чтобы запустить сценарий, который содержит ActiveXObjects.

В разделе, посвященном настоящему времени, мы поговорим об API для работы с файлами и Drag-and-Drop, а также о некоторых интересных примерах.

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

Настоящее. Управление добавленными файлами

Существует два способа передать файл в современный браузер (IE10+):

1) Input тег с типом “file”;

2) Перетянуть файлы на какой-либо элемент DOM-модели.

Старые добрые времена с элементом Input

Первый вариант может использоваться даже в старых браузерах. Единственное отличие в том, что мы не можем получить содержимое файлов в IE9 и более ранних версий. Это означает, что для выполнения некоторых действий нам все еще необходимо использовать сервер. Чтобы получить файлы, выбранные пользователем, нам нужно добавить обработчик события “change” и проверять свойство “files” данного элемента при вызове функции-обработчика.

", data1 = document.getElementById("demo1_fileData"); document.getElementById("demo1_fileElement").addEventListener("change", function(e)< var file = this.files ? this.files[0] : < name: this.value >, fileReader = window.FileReader ? new FileReader() : null; if (file)< if (fileReader)< fileReader.addEventListener("loadend", function(e)< data1.innerHTML = tamplate.replace("<>", file.name).replace(">", file.size).replace(">", e.target.result.substring(0, 10)); >, false); fileReader.readAsText(file); > else < data.innerHTML = tamplate.replace("<>", file.name).replace(">", "Don`t know").replace(">", "This browser isn`t smart enough!"); > > >, false);Как видите, здесь мы использовали метод “readAsText” объекта “FileReader”, чтобы получить содержимое файла. У него также есть методы, которые читают файл(файлы) и возвращают результаты в различных форматах.

Будьте внимательны, используя метод “readAsBinaryString”, поскольку он не поддерживается браузером IE версий 10-11.

Возможно, вы также хотите контролировать процесс чтения файла, отобразить индикаторы прогресса или ожидания, или прервать его, если файлы слишком объемные. Специально для вас у FileReader есть такие события как onprogress, onabort, onloadstart, onloadend, onerror, а также метод abort, который останавливает процесс чтения и выдает ошибку, которая может быть обработана.

В данном примере мы немного исправили функциональность для IE9, у которого нет возможности чтения файлов. Из информации о выбранном файле (множественный выбор не поддерживается) мы можем получить только его имя, которое хранится в свойстве “value” элемента input.

Перетащи меня в браузер!

Это был старый способ добавления файлов в браузер. Он мог использоваться даже в IE6 (addEventListener поддерживается в IE9+), с некоторыми изменениями. В современных браузерах (IE10+) существует другой способ добавления файлов. Все, что нужно сделать, это повесить обработчик события “drop” на любой элемент веб-страницы. Это может быть как специальный элемент с текстом внутри, так и просто body. После этого пользователь может перетащить какой-либо файл в элемент, на котором висит обработчик события “drop”. Выбранный файл можно найти в свойстве “dataTransfer” объекта события. Давайте посмотрим на демо:

Несколько важных замечаний по этому демо:

1) Прежде всего, вам не стоит проверять, поддерживает ли ваш браузер событие “ondrop”, поскольку используется IE9. Он поддерживает данное событие, но не имеет свойства dataTransfer.

2) Если вы хотите поймать событие “ondrop”, вам необходимо добавить обработчик события “ondragover” и вызвать функцию preventDefault. По умолчанию, браузер попытается загрузить этот файл или отобразить его на странице (если это рисунок или PDF файл), и вам нужно его остановить.

Поддержка старых версий браузеров: в таких браузерах, как IE9, вы можете поместить элемент input из предыдущих примеров на текущем элементе, растянуть его, установить для него прозрачность равную 100%, и изменить текст на следующий: “Кликните и выберите файл”. Когда пользователь кликнет на этот элемент, он увидит обычный диалог для выбора файлов. Подобное решение подходит также для планшетов и телефонов, у которых нет возможности разделить экраны и перетягивать элементы между ними.

Перетащи меня из браузера!

Предыдущий пример мог вызвать следующий вопрос о функциональности drag-and-drop: “Можем ли мы перетащить файлы из браузера на компьютер?” Ответ будет “Да”, но работает это только в браузере Chrome. Тем не менее, это отличная функция для вашей веб страницы, и мы должны ее испробовать. В следующем примере вам нужно перетянуть картинку в формате PDF на свой компьютер, и она будет сохранена как PDF файл.

Перетащите эту картинку из браузера на ваш рабочий стол


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

“Все течет, все изменяется … и … дважды в одну и ту же реку войти невозможно”. (Гераклит)

Теперь мы можем получить файлы и их содержимое в формате JavaScript. Но что мы можем с ними делать? Как мы можем их изменить? Вот в чем вопрос.

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

Примером также может быть парсинг файла в формате excel. Вам не нужно посылать его на сервер, конвертировать в JSON и отправлять обратно. Это можно сделать на клиентской стороне, не тратя времени на запрос и ожидание ответа сервера. Уже есть библиотеки для парсинга xls и xlsx файлов, которые вы можете найти здесь: XLS и XLSX.

Еще один способ использования файлов и их содержимого в JavaScript – это работа с двоичными данными. Это могут быть рисунки, видео или какие-либо другие файлы. Если мы хотим обрабатывать двоичные данные, нам нужно использовать новые свойства JavaScript, такие как объект Blob и типизированные массивы. Мы не будем углубляться в эту тему, потому что она слишком большая и заслуживает отдельной статьи.

Объект Blob – это объект, который выглядит, как обычный файл на JavaScript, и содержит необработанные данные. Конструктор такого объекта принимает два параметра – данные и объект с его опциями. В состав данных могут входить ArrayBuffer, типизированный массив, объект Blob или строки. Это все те данные, которые будут храниться в новом объекте Blob. Опции включают в себя тип данных.

У каждого объекта Blob есть тип и свойства, которые задают его размеры, а также метод “slice”. Все данные, которые содержатся в данном объекте Blob, можно разделить с помощью метода “slice”. Этот метод возвращает новый объект Blob, который содержит в себе отделенную часть данных.

Типизированные массивы и буферы используются для хранения двоичных данных фиксированной длины и определенного типа (Int8Array или Int32Array).

Все это позволяет нам делать занимательные вещи на клиентской стороне, например, сжимать файлы. Эта библиотека позволяет применить алгоритм Deflate ко всем выбранным файлам, и собрать их в один zip файл. Кроме того, она использует Web Workers, чтобы описанный процесс протекал в фоновом режиме.

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

Будущее. Создайте свою файловую систему с блэкджеком и… всеми причитающимися атрибутами

Теперь мы знаем, как получать файлы и изменять их. Настало время раскрыть секрет хранения файлов. Да-да, речь идет именно о создании и хранении папок и файлов внутри браузера.

Во время написания этой статьи данная функциональность поддерживалась только браузерами Chrome и Opera. Опять-таки, это не такая уж важная проблема, поскольку данная возможность может использоваться как дополнительный инструмент для кэширования файлов в вашем браузере. Давайте более детально рассмотрим ее API.

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

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

Еще один тип файловой системы – постоянный. Браузер никогда не удалит файлы, хранящиеся в ней. Тем не менее, если вы запросите данный тип файловой системы без разрешения пользователя, она не будет работать.

Для того, чтобы запросить разрешение пользователя на использование постоянного хранилища, нам нужно вызвать метод navigator.webkitPersistentStorage.requestQuota .

Константы обоих типов файловых систем хранятся в объекте window: window.TEMPORARY или window.PERSISTENT . Второй параметр – это нужный нам размер хранилища в байтах.

Теперь мы можем создать наше первое хранилище вместимостью 1Гб:

Временная файловая система:

Постоянная файловая система:

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

объект FileError

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

Данный объект имеет интерфейс следующего вида:

объект файловой системы

Как видите, для создания, перемещения, удаления и получения файлов и директорий используются специальные методы. Полученный нами объект “fs” ссылается на корневой каталог файловой системы браузера.

Данный каталог и все другие каталоги, которые мы будем создавать, представлены интерфейсом DirectoryEntry. Все файлы данной файловой системы представлены интерфейсом FileEntry. Мы будем использовать методы getFile и getDirectory для того, чтобы создать файлы и папки и получить их.

Первый параметр данных методов – это файл или путь к нему. Этот путь может быть как абсолютным, так и относительным. Второй параметр – это объект с действиями, которые выполняются в случае, если в указанной директории файл отсутствует. Данный параметр может иметь свойства “create” и “exclusive”.

Если свойству “create” задано значение “true”, будет создан новый файл или директория, а старый файл будет переписан. Если же мы для данного свойства зададим значение “false”, методы вернут объект FileEntry или выдадут ошибку, если файла не существует. Если задано свойство “exclusive” со значением “true”, файлы не будут переписаны.

Для того, чтобы различить файлы и папки, у каждого из двух интерфейсов есть флаги: isDirectory и isFile. Кроме того, существует специальный класс FileWriter, который служит для добавления содержимого в файл. Его необходимо запрашивать у браузера для каждого файла, который нужно изменить. Давайте добавим несколько файлов:

dev tool

После этого вы увидите опцию “FileSystem” на вкладке “Resources” раздела DevTool. Здесь отображаются все созданные файлы и хранилища.

файлы и хранилища

Данные файлы мы также можем получить по специальному внутреннему URL браузера, который может быть установлен в качестве атрибута “src” тега IMG. Он начинается с слова “filesystem:” и выглядит вот так: “filesystem:/persistent/files/newFile.txt”.

Чтобы получить URL, мы использовали метод “toURL”. Теперь у нас есть вся необходимая информация для того, чтобы создать веб-приложение для кэширования аудио и видео файлов, которое позволяет слушать и смотреть их без подключения к интернету. Прежде всего, загрузим двоичный файл. Затем, мы сохраним его в постоянном хранилище и запустим.

Сохраните песню, отключите Интернет и наслаждайтесь музыкой))

Сохранить в браузер (может занять некоторое время)ИгратьУдалить песню из браузера

Читайте также: