Как открыть файл
Обновлено: 21.11.2024
Открытие файлов и чтение их данных — это то, что мы научились делать с помощью простого двойного щелчка при самом раннем взаимодействии с компьютером. Однако на программном уровне все существенно сложнее…
Вот официальная документация Python по чтению и записи файлов. Но прежде чем читать это, давайте углубимся в тот минимум, который я хочу, чтобы вы знали.
Давайте сразу перейдем к примеру кода. Представьте, что у вас есть файл с именем example.txt в текущем каталоге. Если нет, просто создайте его, а затем заполните его этими строками и сохраните:
Вот короткий фрагмент кода Python, чтобы открыть этот файл и распечатать его содержимое на экране. Обратите внимание, что этот код Python должен выполняться в том же каталоге, где находится файл example.txt.
Это показалось слишком сложным? Вот менее подробная версия:
Вот как читать этот файл построчно, используя цикл for:
(Примечание: если вы уже получаете сообщение об ошибке FileNotFoundError — этого почти следовало ожидать. Продолжайте читать!)
Все еще кажется слишком сложным? Что ж, нельзя обойти стороной тот факт, что на программном уровне открытие файла отличается от чтения его содержимого. Мало того, мы также должны вручную закрыть файл.
А теперь давайте рассмотрим это шаг за шагом.
Чтобы открыть файл, мы просто используем метод open() и передаем в качестве первого аргумента имя файла:
Это кажется достаточно простым, так что давайте перейдем к некоторым распространенным ошибкам.
Как напортачить при открытии файла
Вероятно, это самая распространенная ошибка, которая возникает при попытке открыть файл.
На самом деле, я видел, как студенты тратили десятки часов, пытаясь пройти мимо этого сообщения об ошибке, потому что они не останавливались, чтобы прочитать его. Итак, прочтите: что означает FileNotFoundError?
Попробуйте поставить пробелы там, где заглавные буквы:
Вы получите эту ошибку, потому что попытались открыть файл, которого просто не существует. Иногда это простая опечатка, когда вы пытаетесь открыть() файл с именем "example.txt", но случайно пишете его как "exmple.txt" .
Но чаще всего это происходит потому, что вы знаете, что файл существует под заданным именем файла, например "example.txt", но как ваш код Python узнает, где находится этот файл? Это «example.txt», который существует в вашей папке «Загрузки»? Или тот, который может существовать в папке «Документы»? Или тысячи других папок на вашем компьютере?
Это довольно сложный вопрос. Но первый шаг к тому, чтобы не тратить время попусту, заключается в том, что если вы когда-нибудь увидите эту ошибку, прекратите все, что вы делаете. Не настраивайте свой запутанный цикл for. Не пытайтесь установить новую библиотеку Python. Не перезагружайте компьютер, а затем повторно запустите скрипт, чтобы посмотреть, устранится ли ошибка волшебным образом.
Ошибка FileNotFoundError возникает из-за того, что вы либо не знаете, где на самом деле находится файл на вашем компьютере. Или, даже если вы знаете, вы не знаете, как сообщить вашей программе Python, где она находится. Не пытайтесь исправить другие части кода, не связанные с указанием имен файлов или путей.
Как исправить ошибку FileNotFoundError
Вот надежное решение: убедитесь, что файл действительно существует.
Давайте начнем с нуля, допустив ошибку. В системной оболочке (например, в терминале) перейдите в папку на рабочем столе:
Теперь запустите ipython:
Теперь, когда вы находитесь в интерактивном интерпретаторе Python, попробуйте открыть файл с именем, которое, как вы знаете, не существует на вашем рабочем столе, а затем насладитесь сообщением об ошибке:
Теперь вручную создайте файл на рабочем столе, используя Sublime Text 3 или что угодно. Добавьте к нему текст и сохраните его.
Посмотрите и убедитесь сами, что этот файл действительно существует в папке вашего рабочего стола:
Хорошо, теперь вернитесь к интерактивной оболочке Python (т. е. ipython), которую вы открыли после перехода в папку рабочего стола (т. е. cd ~/Desktop ). Повторно запустите эту команду open(), которая привела к ошибке FileNotFoundError:
Надеюсь, вы не получите ошибку.
Но что это за объект, на который указывает переменная myfile? Используйте метод type(), чтобы выяснить это:
И что это это? Детали не важны, за исключением того, что myfile определенно не является просто строковым литералом, то есть str .
Используйте автозаполнение Tab (т. е. введите myfile. ), чтобы получить список существующих методов и атрибутов для объекта myfile:
Ну, мы можем делать с файлами намного больше, чем просто читать из них(). Но давайте пока сосредоточимся только на чтении.
Предполагая, что переменная myfile указывает на какой-то файловый объект, вот как вы читаете из него:
Что находится в этой переменной mystuff? Снова используйте функцию type():
Это просто строка. Это, конечно же, означает, что мы можем его распечатать:
Или посчитайте количество символов:
Или распечатайте его заглавными буквами:
И это все, что нужно для чтения из открытого файла.
Теперь об ошибках.
Как ошибиться при чтении из файла
Вот очень, очень распространенная ошибка:
Вывод ошибки:
Обратите внимание, что это не ошибка FileNotFoundError. Это AttributeError — что, правда, не очень понятно — но читайте следующую часть:
Сообщение об ошибке попадает в точку: объект str — т. е. строковый литерал, например. что-то вроде "hello world" не имеет атрибута чтения.
Пересмотр ошибочного кода:
Если имя файла указывает на "example.txt", то имя файла является просто объектом str.
Другими словами, имя файла не является файловым объектом. Вот более наглядный пример ошибочного кода:
И бить в точку про голову:
Почему это такая распространенная ошибка? Потому что в 99% наших типичных взаимодействий с файлами мы видим имя файла в графическом интерфейсе нашего рабочего стола и дважды щелкаем это имя файла, чтобы открыть его. Графический интерфейс запутывает процесс — и не зря. Кого волнует, что происходит, если мой файл открывается, когда я дважды щелкаю по нему!
К сожалению, нам приходится проявлять осторожность при попытке чтения файла программным способом. Открытие файла — это отдельная операция от его чтения.
- Вы открываете файл, передавая его имя файла – например, example.txt — в функцию open(). Функция open() возвращает файловый объект.
- Чтобы фактически прочитать содержимое файла, вы вызываете метод read() этого файлового объекта.
Опять же, вот код, но немного более подробный:
Файловый объект также имеет метод close(), который формально очищает открытый файл и позволяет другим программам безопасно обращаться к нему. Опять же, это низкоуровневая деталь, о которой вы никогда не думаете в повседневных вычислениях. На самом деле, это то, что вы, вероятно, забудете в контексте программирования, поскольку не закрытие файла ничего автоматически не сломает (по крайней мере, пока мы не начнем выполнять гораздо более сложные типы файловых операций, по крайней мере…) . Как правило, после завершения скрипта все незакрытые файлы автоматически закрываются.
Однако мне нравится закрывать файл явным образом — не только из соображений безопасности, но и для закрепления концепции файлового объекта.
Одним из преимуществ более детального изучения открытия и чтения файлов является то, что теперь у нас есть возможность читать файлы построчно, а не одним гигантским фрагментом. Опять же, чтобы прочитать файлы как один гигантский фрагмент содержимого, используйте метод read():
Сейчас это не кажется такой уж большой проблемой, но это потому, что example.txt, вероятно, содержит всего несколько строк. Но когда мы имеем дело с огромными файлами — такими как все 3,3 миллиона записей о всех, кто пожертвовал более 200 долларов одному комитету президентской кампании в США в 2012 году или о всех, кто когда-либо посещал Белый дом, — открывается и чтение файла сразу заметно медленнее. И это может даже привести к сбою вашего компьютера.
Если вам интересно, почему в программах для работы с электронными таблицами, таких как Excel, существует ограничение на количество строк (примерно 1 000 000), то это потому, что большинство пользователей делают работу с файлом данных одновременно. Однако многие интересные файлы данных слишком велики для этого. Мы столкнемся с этими сценариями позже в этом квартале.
На данный момент вот как обычно выглядит построчное чтение:
Поскольку каждая строка в текстовом файле имеет символ новой строки (который представлен как \n, но обычно является «невидимым»), вызов функции print() приведет к созданию вывода с двойным интервалом, поскольку print() добавляет новую строку к тому, что он выводит (т.е. вернитесь к исходной программе print("hello world")).
Чтобы избавиться от этого эффекта, вызовите метод strip(), принадлежащий объектам str и удаляющий пробельные символы с левой и правой стороны текстовой строки:
И, конечно же, вы можете сделать вещи громче с помощью старой доброй функции upper():
Это пока. Мы не рассмотрели, как писать в файл (что является гораздо более опасной операцией) — я оставлю это для отдельного урока. Но достаточно знать, что, работая с файлами как программист, мы должны быть более точными и конкретными в шагах.
Справочники и связанные материалы
Существует несколько способов представления вывода программы; данные могут быть распечатаны в удобочитаемой форме или записаны в файл для будущего использования. В этой главе обсуждаются некоторые возможности.
Вычислительные методы в гражданской сфере созданы Дэном Нгуеном в качестве онлайн-справочника для Стэнфордской лаборатории вычислительной журналистики и программы магистратуры по журналистике.
Файл с расширением .OUT содержит различные типы данных, сгенерированных другими программами, как общее расширение файла.Такие файлы могут быть сгенерированы как стандартный файл данных, являющийся результатом работы данной программы.
Файлы OUT могут содержать текст или другие наборы данных, сгенерированные при запуске и выполнении данного приложения. Они часто используются для отладки или анализа работы программ.
Программы, которые могут открыть файл .OUT
Окна
Mac OS
Линукс
Как открыть файлы OUT
Если появилась ситуация, в которой Вы не можете открыть файл OUT на своем компьютере - причин может быть несколько. Первой и одновременно самой важной (встречается чаще всего) является отсутствие соответствующей аппликации обслуживающей OUT среди установленных на Вашем компьютере.
Очень простой способ решить эту проблему — найти и загрузить соответствующее приложение. Первая часть задания уже выполнена — программное обеспечение, поддерживающее файл OUT, можно найти в таблице. Теперь просто скачайте и установите соответствующее приложение.
Возможные проблемы с файлами формата OUT
Невозможность открытия файла OUT и работы с ним не обязательно означает, что на вашем компьютере не установлено соответствующее программное обеспечение. Могут быть и другие проблемы, которые также блокируют нашу способность работать с файлом формата вывода. Ниже приведен список возможных проблем.
- Повреждение открываемого файла OUT
- Неверные ссылки на файл OUT в записях реестра.
- Случайное удаление описания расширения OUT из реестра Windows.
- Неполная установка приложения, поддерживающего формат OUT
- Открываемый файл OUT инфицирован нежелательным вредоносным ПО.
- На компьютере недостаточно аппаратных ресурсов, чтобы открыть файл OUT.
- Драйверы оборудования, используемого компьютером для открытия файла OUT, устарели.
Если вы уверены, что всех этих причин в вашем случае не существует (или они уже устранены), файл OUT должен без проблем работать с вашими программами. Если проблема с файлом OUT все-таки не решена, это может значить, что в этом случае появилась другая, редкая проблема с файлом OUT. В этом случае единственное, что вы можете сделать, это обратиться за помощью к профессиональным сотрудникам.
C++ предоставляет следующие классы для вывода и ввода символов в/из файлов:
- ofstream : класс потока для записи в файлы
- ifstream : класс потока для чтения из файлов
- fstream : класс потока для чтения и записи из/в файлы.
Этот код создает файл с именем example.txt и вставляет в него предложение так же, как мы привыкли делать с cout , но вместо этого используя файловый поток myfile.
Но давайте пошагово:
Открыть файл
Первой операцией, обычно выполняемой над объектом одного из этих классов, является связывание его с реальным файлом. Эта процедура известна как открытие файла. Открытый файл представлен в программе потоком (т. е. объектом одного из этих классов; в предыдущем примере это был myfile ), и любая операция ввода или вывода, выполняемая над этим объектом потока, будет применяться к связанному с ним физическому файлу.
Чтобы открыть файл с объектом потока, мы используем его функцию-член open :
открыть (имя файла, режим);
Где имя файла — это строка, представляющая имя открываемого файла, а режим — необязательный параметр с комбинацией следующих флагов:
ios::in | Открыть для операций ввода. |
ios::out | Открыть для операций вывода. |
ios::binary | Открыть в двоичном режиме. |
Установить начальную позицию в конце файла. Если этот флаг не установлен, начальной позицией является начало файла. | |
ios::app | Все операции вывода выполняется в конце файла, добавляя содержимое к текущему содержимому файла. |
ios::trunc | Если файл открыт для операций вывода и он уже существовал, его предыдущее содержимое удаляется и заменяется новым. |
Все эти флаги можно комбинировать с помощью побитового оператора ИЛИ ( | ). Например, если мы хотим открыть файл example.bin в двоичном режиме для добавления данных, мы можем сделать это с помощью следующего вызова функции-члена open :
Каждая из открытых функций-членов классов ofstream , ifstream и fstream имеет режим по умолчанию, который используется, если файл открывается без второго аргумента:
класс | параметр режима по умолчанию |
---|---|
ofstream | ios::out< /td> |
ifstream | ios::in |
fstream | ios:: в | ios::out |
Для классов ifstream и ofstream ios::in и ios::out автоматически и соответственно предполагаются, даже если режим не включает их передается в качестве второго аргумента функции-члену open (флаги объединяются).
Для fstream значение по умолчанию применяется только в том случае, если функция вызывается без указания значения параметра режима. Если функция вызывается с любым значением этого параметра, режим по умолчанию переопределяется, а не комбинируется.
Файловые потоки, открытые в двоичном режиме, выполняют операции ввода и вывода независимо от каких-либо соображений формата. Недвоичные файлы известны как текстовые файлы, и некоторые переводы могут происходить из-за форматирования некоторых специальных символов (например, символов новой строки и возврата каретки).
Поскольку первая задача, которая выполняется в файловом потоке, обычно заключается в открытии файла, эти три класса включают конструктор, который автоматически вызывает функцию открытого члена и имеет те же параметры, что и этот член. Следовательно, мы могли бы также объявить предыдущий объект myfile и выполнить ту же операцию открытия в нашем предыдущем примере, написав:
Объединение построения объекта и открытия потока в одном операторе. Обе формы для открытия файла действительны и эквивалентны.
Чтобы проверить, успешно ли файловый поток открыл файл, вы можете сделать это, вызвав член is_open . Эта функция-член возвращает логическое значение true в случае, если объект потока действительно связан с открытым файлом, или false в противном случае:
Закрытие файла
Когда мы закончим наши операции ввода и вывода в файле, мы закроем его, чтобы операционная система была уведомлена, и ее ресурсы снова стали доступными. Для этого мы вызываем функцию-член потока close. Эта функция-член очищает связанные буферы и закрывает файл:
После вызова этой функции-члена объект потока можно повторно использовать для открытия другого файла, и файл снова становится доступным для открытия другими процессами.
В случае уничтожения объекта, все еще связанного с открытым файлом, деструктор автоматически вызывает функцию-член close .
Текстовые файлы
Потоки текстовых файлов — это потоки, в режиме открытия которых не включен флаг ios::binary. Эти файлы предназначены для хранения текста, поэтому все значения, которые вводятся или выводятся из/в них, могут подвергаться некоторым преобразованиям форматирования, которые не обязательно соответствуют их буквальным двоичным значениям.
Операции записи в текстовые файлы выполняются так же, как мы работали с cout :
Чтение из файла также может выполняться так же, как мы это делали с cin :
В последнем примере текстовый файл считывается и его содержимое выводится на экран. Мы создали цикл while, который считывает файл построчно, используя getline. Значение, возвращаемое getline, является ссылкой на сам объект потока, который при оценке как логическое выражение (как в этом цикле while) является истинным, если поток готов к дальнейшим операциям, и ложным, если конец файла была достигнута или произошла какая-либо другая ошибка.
Проверка флагов состояния
Существуют следующие функции-члены для проверки определенных состояний потока (все они возвращают логическое значение):
bad() Возвращает true, если операция чтения или записи не удалась. Например, в случае, если мы пытаемся записать в файл, который не открыт для записи, или если на устройстве, куда мы пытаемся записать, не осталось места. fail() Возвращает true в тех же случаях, что и bad() , но также и в случае ошибки формата, например, когда извлекается буквенный символ, когда мы пытаемся прочитать целое число. eof() Возвращает true, если файл, открытый для чтения, достиг конца. good() Это самый общий флаг состояния: он возвращает false в тех же случаях, когда вызов любой из предыдущих функций вернул бы true. Обратите внимание, что хорошее и плохое не являются полными противоположностями (хорошо проверяет сразу несколько флагов состояния).
Функция-член clear() может использоваться для сброса флагов состояния.
получить и разместить позиционирование потока
Все объекты потоков ввода-вывода сохраняют внутреннюю -по крайней мере- одну внутреннюю позицию:
ifstream , как и istream , сохраняет внутреннюю позицию получения с расположением элемента, который будет считан в следующей операции ввода.
ofstream , как и ostream , сохраняет внутреннюю позиция размещения с местом, где должен быть записан следующий элемент.
Наконец, fstream сохраняет обе позиции: get и put, подобно iostream .
Эти внутренние позиции потока указывают на места в потоке, где выполняется следующая операция чтения или записи.Эти позиции можно наблюдать и изменять с помощью следующих функций-членов:
tellg() и tellp()
Эти две функции-члены без параметров возвращают значение типа члена streampos , который является типом, представляющим текущую позиция получения (в случае Tellg ) или позиция размещения< /i> (в случае Tellp ).
seekg() и seekp()
Эти функции позволяют изменить расположение позиций get и put. Обе функции перегружены двумя разными прототипами. Первая форма:
seekg (позиция);
искать (положение);
Используя этот прототип, указатель потока заменяется на абсолютную позицию (считая с начала файла). Тип этого параметра — streampos , который совпадает с типом, возвращаемым функциями Tellg и Tellp .
Другая форма для этих функций:
seekg (смещение, направление);
искать (смещение, направление);
Используя этот прототип, get или put position устанавливается на значение смещения относительно некоторой конкретной точки, определяемой параметром direction . смещение имеет тип streamoff . А направление имеет тип seekdir , который представляет собой нумерованный тип, определяющий точку, от которой отсчитывается смещение, и может принимать любое из следующих значений:
ios::beg | смещение, отсчитываемое от начала потока |
ios::cur< /td> | смещение, отсчитываемое от текущей позиции |
ios::end | смещение, отсчитываемое от конца потока | < /tr>
В следующем примере функции-члены, которые мы только что видели, используются для получения размера файла:
Обратите внимание на тип, который мы использовали для переменных begin и end :
streampos — это особый тип, используемый для позиционирования буфера и файла и возвращаемый функцией file.tellg() . Значения этого типа можно безопасно вычесть из других значений того же типа, а также преобразовать в целочисленный тип, достаточно большой, чтобы вместить размер файла.
Эти функции позиционирования потока используют два конкретных типа: streampos и streamoff . Эти типы также определены как типы-члены класса потока:
Тип | Тип элемента | Описание |
---|---|---|
streampos | < td>ios::pos_typeОпределяется как fpos . Его можно преобразовать в/из streamoff и добавить или вычесть значения этих типов. | |
streamoff | ios::off_type < /td> | Это псевдоним одного из основных целочисленных типов (например, int или long long ). |
Каждый из указанных выше типов членов является псевдоним его эквивалента, не являющегося членом (они точно такого же типа). Неважно, какой из них используется. Типы-члены являются более общими, поскольку они одинаковы для всех объектов потока (даже для потоков, использующих экзотические типы символов), но типы, не являющиеся членами, широко используются в существующем коде по историческим причинам.
Двоичные файлы
Для двоичных файлов чтение и запись данных с помощью операторов извлечения и вставки ( и >> ) и таких функций, как getline, неэффективны, поскольку нам не нужно форматировать какие-либо данные, а данные, скорее всего, не форматируются строками. р>
запись ( memory_block, size );
чтение (блок_памяти, размер);
Где memory_block имеет тип char* (указатель на char ) и представляет собой адрес массива байтов, где хранятся прочитанные элементы данных или откуда элементы данных должны быть записаны принимаются. Параметр размера представляет собой целочисленное значение, указывающее количество символов, которое должно быть прочитано или записано из/в блок памяти.
В этом примере весь файл считывается и сохраняется в блоке памяти. Давайте посмотрим, как это делается:
Во-первых, файл открывается с флагом ios::ate, что означает, что указатель get будет расположен в конце файла. Таким образом, когда мы вызываем функциюtellg() , мы напрямую получаем размер файла.
После получения размера файла мы запрашиваем выделение блока памяти, достаточного для хранения всего файла:
Сразу после этого мы приступаем к установке get position в начале файла (помните, что мы открыли файл с этим указателем в конце), затем читаем весь файл, и окончательно закрыть его:
Теперь мы можем работать с данными, полученными из файла. Но наша программа просто объявляет, что содержимое файла находится в памяти, и затем завершает работу.
Буферы и синхронизация
Когда мы работаем с файловыми потоками, они связаны с внутренним буферным объектом типа streambuf. Этот буферный объект может представлять собой блок памяти, который действует как посредник между потоком и физическим файлом.Например, при использовании ofstream каждый раз, когда вызывается функция-член put (которая записывает один символ), символ может быть вставлен в этот промежуточный буфер вместо того, чтобы записываться непосредственно в физический файл, с которым связан поток. р>
Операционная система также может определять другие уровни буферизации для чтения и записи файлов.
При очистке буфера все содержащиеся в нем данные записываются на физический носитель (если это выходной поток). Этот процесс называется синхронизацией и происходит при любом из следующих обстоятельств:
Невозможность открывать файлы в обычном режиме — одна из самых неприятных технических проблем, с которыми вы, вероятно, столкнетесь. Но не стоит сдаваться и сразу их удалять. В большинстве случаев следующие приемы позволят вам решить проблему самостоятельно.
Найти причину
Возможны всевозможные проблемы, из-за которых PDF не загружается или видео отказывается воспроизводиться. Возможно, файл поврежден, кто-то сохранил его в неправильном формате или вы просто открываете его не той программой. Немного детективной работы на раннем этапе может помочь вам понять, в чем проблема. Оттуда вы можете выбрать лучший способ ее решения.
Сообщение, которое вы видите при попытке открыть файл, даст вам некоторые подсказки. Если дважды щелкнуть элемент, относящийся к категории файлов неизвестного типа, компьютер Windows спросит: «Как вы хотите открыть этот файл?» и машина macOS скажет: «Нет набора приложений…». Затем обе операционные системы предоставят вам варианты поиска приложений, которые могут открыть загадочный формат. В определенной программе вы можете увидеть сообщения о нечитаемом содержимом или недопустимых типах файлов при попытке открыть файл, который программа не может прочитать полностью. Это может означать, что файл поврежден или имеет неправильное расширение.
Если вы не уверены, с каким файлом имеете дело, вам могут помочь несколько онлайн-инструментов. CheckFileType и Online Trid File Identifier позволяют загрузить файл в браузер, а затем идентифицировать загадочный элемент. Как только вы узнаете тип файла, вы сможете найти программу, способную получить к нему доступ. Как всегда, будьте осторожны с открытием файлов, в которых вы не уверены или которые получены из подозрительных источников.
Изменить расширение или формат файла
Расширение файла — это трех- или четырехбуквенный код после точки в его имени. Например, расширением музыкального файла будет «.mp3», которое появляется в конце. Некоторые файлы отображаются без этих кодов, но вы можете заставить их открыться. В Windows перейдите в проводник, перейдите на вкладку «Вид» и установите флажок «Расширения имени файла». В macOS выберите Finder, затем «Настройки», перейдите на вкладку «Дополнительно» и установите флажок «Показать все расширения файлов».
Эти расширения действуют как указатели или метки для формата файла, то есть способа, которым файл был закодирован или сохранен на диске. Файл MP3 будет иметь вышеупомянутый формат .mp3, презентация PowerPoint будет иметь формат .ppt, а видеофайл может иметь формат .m4v. Формат и расширение должны совпадать, иначе у вас возникнут проблемы при открытии файлов. Чтобы изменить расширение файла в Windows или macOS, просто нажмите на файл и отредактируйте последние три или четыре буквы, чтобы показать правильное расширение для формата.
Изменение расширения на самом деле не меняет содержимого файла, но может помочь вашим приложениям распознать файл, что поможет вам открыть его. Например, ваш редактор изображений может не знать, что такое «picture.ipg», но он без проблем откроет «picture.jpg». Если расширение файла по какой-либо причине указано неправильно, его легко исправить.
Изменить формат файла сложнее; это включает в себя повторное сохранение файла с использованием другого набора стандартов. Вообще говоря, вам нужно будет открыть файл в каком-то приложении, чтобы изменить его формат, поэтому это не сработает для поврежденных файлов. Это скорее исправление для файлов, которые не открываются в вашем любимом графическом редакторе или текстовом процессоре, но открываются в альтернативной программе. Скажем, коллега набрал документ в программе Pages для Mac, присвоив ему расширение .pages, а затем отправил файл вам. Возможно, вы не сможете открыть документ в Microsoft Word, поэтому, если вы предпочитаете этот текстовый процессор, вы должны изменить формат: откройте документ в Pages, нажмите «Файл», затем «Экспортировать в» и сохраните его в формате Word с расширением .doc. или расширение .docx.
Если файл не открывается в одном приложении, попробуйте открыть его в другом, а затем изменить формат файла. Например, бесплатная программа HandBrake, доступная как для Windows, так и для macOS, может преобразовать один видеофайл в файл другого типа. Если вы не можете открыть видео на своем компьютере или смартфоне, HandBrake может преобразовать его в подходящий формат.Если вас не интересует видеоприложение — вы просто хотите посмотреть свой файл — попробуйте бесплатный и известный медиаплеер VLC, который может воспроизводить практически все существующие форматы видеофайлов. Точно так же вы можете открыть практически любой формат изображения с помощью IrfanView, если файл правильно закодирован.
Восстановить поврежденные файлы
Эти приемы — редактирование расширений файлов, изменение форматов и использование разных приложений — пока не помогут. Чтобы восстановить действительно поврежденные файлы, вам понадобится специальный инструмент для восстановления. Эти программы обычно ориентированы на один конкретный формат файла, поэтому вам понадобится один инструмент для исправления документа текстового процессора, другой — для расшифровки видео и так далее. Чтобы выяснить, какой тип программы восстановления вам нужен, проверьте расширение и любую другую информацию, которую вы можете найти о файле.
Из-за огромного количества типов файлов мы не будем рассматривать инструменты восстановления для всех из них. Тем не менее, быстрый онлайн-поиск (сохраняйте ключевые слова как можно более конкретными) должен выявить некоторые лиды для любого формата, с которым вы имеете дело. Обязательно ознакомьтесь с бесплатными и официальными вариантами, прежде чем платить за программу. Например, с документами Word сначала попробуйте собственный инструмент восстановления Word. Не платите деньги за исправление, если вы не исчерпали все другие варианты, и вы прочитали отзывы пользователей или профессионалов, которые предполагают, что это может работать для вас. Чтобы получить советы по восстановлению документов, видео и PDF-файлов, читайте дальше.
Чтобы использовать встроенный в Word инструмент восстановления, запустите программу, нажмите «Открыть другие документы» и выберите «Обзор». Выберите проблемный файл, щелкните стрелку вниз рядом с кнопкой «Открыть» и выберите «Открыть и восстановить» из списка. Для других приложений Microsoft Office, таких как Excel и Powerpoint, вы можете получить доступ к аналогичным инструментам таким же образом.
Еще один часто повреждаемый тип файлов – видео. Мы упоминали HandBrake и VLC Media Player, но, хотя они могут конвертировать форматы и открывать множество различных типов видео, они не могут восстанавливать поврежденные видеофайлы. Что касается ваших бесплатных опций, Recover MP4 устраняет лишь ограниченное количество проблем… и это все, если вы не готовы платить. В этом случае Grau GmbH Video Repair Tool (примерно от 35 долларов) и Stellar Repair for Video (от 50 долларов) дают хорошие рекомендации, а также предлагают бесплатные демонстрации. Прежде чем платить, попробуйте программы, чтобы убедиться, что они работают на вас.
Кроме того, файлы PDF часто повреждаются во время их создания и загрузки. Два бесплатных онлайн-сервиса, Repair PDF и PDF Online, могут вернуть ваш документ из цифровой могилы. В случае сбоя загрузите PDF Repair Toolbox (только для Windows — 27 долларов). Он позволяет протестировать поврежденный файл перед тем, как взимать плату за полную версию программного обеспечения.
К сожалению, некоторые файлы не подлежат восстановлению — вы не сможете исправить их все. Иногда ваш единственный вариант — вернуться к источнику этого файла, будь то музыкальный сервис или коллега, который отправил вам документ по электронной почте, и получить новую копию. В некоторых случаях вам, возможно, даже придется стиснуть зубы и создать свой собственный новый файл с нуля.
Дэвид Нилд (David Nield) — независимый участник Popular Science. Он создает руководства и разъяснения для раздела "Сделай сам" по всем вопросам: от улучшения фотографий на смартфоне до повышения безопасности ноутбука. У него не так много свободного времени, но если оно есть, то он смотрит малоизвестные фильмы и совершает длительные прогулки по сельской местности.
Читайте также: