С работа с файловой системой: C# и .NET | Работа с потоками и файловой системой – часть 6. Поддержка работы с дисками с файловой системой FAT / НеоБИТ corporate blog / Habr

Работа с файловой системой в языке 1С 8.3, 8.2 (в примерах)

&НаСервере
Процедура ЧтениеИЗаписьФайловНаСервере()
 
    /// Как записать произвольное значение в файл в 1с 8.3, 8.2
 
    // любое сериализуемое (то есть превращаемое 
    // в строку и обратно) значение можно сохранять
    // в файл, например, массивы, списки значений, строки
    // структуры и т.д.
    Числа = Новый Массив;
    Числа.Добавить(35);
    Числа.Добавить(67);
    ЗначениеВФайл("c:\числа.txt", Числа);
    // эта функция работает только на сервере
 
    /// Как восстановить произвольное значение из файла в 1с 8.3, 8.2    
 
    ЧислаИзФайла = ЗначениеИзФайла("c:\числа.txt");
    Сообщить(ЧислаИзФайла[0]); // 35
    Сообщить(ЧислаИзФайла[1]); // 67
 
    /// Как записать текстовый файл в 1с 8.3, 8.2
 
    // работает как на сервере, так и на клиенте
    Текст = Новый ЗаписьТекста(
        "c:\привет.txt", // имя
        КодировкаТекста.ANSI, // кодировка
        Символы.ПС, // разделитель строк (необ.)
        Ложь // перезаписывать файл, а не дописывать в конец (необ.)
    );    
    Текст.ЗаписатьСтроку("Добро пожаловать!");
    Текст.ЗаписатьСтроку("Посторонним вход воспрещен.");
    Текст.Закрыть();
 
    /// Как прочитать текстовый файл в 1с 8.3, 8.2
 
    // работает как на сервере, так и на клиенте
    Текст = Новый ЧтениеТекста(
        "c:\привет.txt", // имя
        КодировкаТекста.ANSI, // кодировка
        Символы.ПС, // разделитель строк (необ.)
        ,
        Истина // монопольный режим (необ.)
    );
 
    // читаем пока есть что читать
    Пока Истина Цикл
        Строка = Текст.ПрочитатьСтроку();
        Если Строка = Неопределено Тогда
            Прервать;
        Иначе
            Сообщить(Строка);
        КонецЕсли;
    КонецЦикла;
 
КонецПроцедуры
 
&НаКлиенте
Процедура ОперацииНадФайлами(Команда)
 
    // для тестов создадим пустой файл
 
    Текст = Новый ЗаписьТекста("c:\file_src.txt");
    Текст.Закрыть();
 
    /// Как проверить существование файла в 1С 8.3, 8.2    
 
    ФайлНаДиске = Новый Файл("c:\file_src.txt");
    Если ФайлНаДиске.Существует() Тогда
        Сообщить("c:\file_src.txt существует");
    КонецЕсли;
 
    /// Как скопировать файл в 1с 8.3, 8.2 
 
    КопироватьФайл(
        "c:\file_src.txt", // что копируем
        "c:\file_dest.txt" // куда копируем
    ); // перезапишет, если уже есть такой файл
 
    /// Как переместить файл в 1с 8.3, 8.2 
 
    ПереместитьФайл(
        "c:\file_dest.txt",
        "c:\file_new.txt"
    ); // перезапишет, если уже есть такой файл
 
    /// Как найти файлы в каталоге в 1с 8.3, 8.2 
 
    // возвращает массив значений типа Файл
    МассивНайденныхФайлов = НайтиФайлы(
        "c:\", // где искать
        "*.txt", // маска поиска
        Ложь // если Истина, то будет искать и в подкаталогах
    );
 
    Для Каждого Файл Из МассивНайденныхФайлов Цикл
        Сообщить("Найден " + Файл.ПолноеИмя);
    КонецЦикла;
 
    /// Как удалить файл в 1с 8.3, 8.2
 
    // если файл readonly - будет ошибка
    УдалитьФайлы(
        "c:\file_new.txt"
    );
 
    /// Как удалить файлы в каталоге по маске в 1с 8.3, 8.2
 
    // поиск в каталоге нерекурсивный
    УдалитьФайлы(
        "c:\helpme1c", // заведомо не существующий каталог
        "*.txt" // маска для поиска удаляемых файлов
    ); // если опустить маску, то удалятся все файлы и каталог
 
    /// Как получить имя временного файла в 1с 8.3, 8.2
 
    Сообщить(
        ПолучитьИмяВременногоФайла()
    ); // например, c:\Temp\v8_11AE_4.tmp
 
    Сообщить(
        ПолучитьИмяВременногоФайла(".txt")
    ); // например, c:\Temp\v8_11AE_5.txt
 
    /// Как прочитать атрибуты файла в 1с 8.3, 8.2
 
    Ф = Новый Файл("c:\file_src.txt");
 
    // время последнего изменения файла
    Сообщить(Ф.ПолучитьВремяИзменения());
 
    // проверяем атрибут только чтение
    Сообщить(Ф.ПолучитьТолькоЧтение());
 
    // проверяем атрибут hidden (скрытность, невидимость)
    Сообщить(Ф.ПолучитьНевидимость());
 
    /// Как установить атрибуты файла в 1с 8.3, 8.2
 
    // меняем время последнего изменения файла
    Ф.УстановитьВремяИзменения(ТекущаяДата());
 
    // меняем атрибут только чтение
    Ф.УстановитьТолькоЧтение(Ложь);
 
    // меняем атрибут невидимости
    Ф.УстановитьНевидимость(Ложь);
 
    /// Как узнать размер файла в 1с 8.3, 8.2
 
    Сообщить(Ф.Размер()); // в байтах
 
    // Как узнать по пути файл это или каталог в 1с 8.3, 8.2
    Если Ф.ЭтоКаталог() Тогда
        Сообщить("Это каталог");
    ИначеЕсли Ф.ЭтоФайл() Тогда
        Сообщить("Это файл");
    КонецЕсли;
 
    /// Как вытащить расширение файла из его пути в 1с 8.3, 8.2
 
    Сообщить(Ф.Расширение); // .txt
 
    /// Как вытащить имя файла без расширения в 1с 8.3, 8.2
 
    Сообщить(Ф.ИмяБезРасширения); // file_src
 
КонецПроцедуры
 
&НаКлиенте
Процедура ОперацииНадКаталогами(Команда)
 
    /// Как создать каталог в 1с 8.3, 8.2
 
    // каталог может уже существовать
    СоздатьКаталог("c:\new_dir");
 
    // создадутся все подкаталоги
    СоздатьКаталог("c:\new_dir\2\3");
 
    /// Как проверить существование каталога в 1с 8.3, 8.2
 
    КаталогНаДиске = Новый Файл("c:\new_dir");
    Если КаталогНаДиске.Существует() Тогда
        Сообщить("Папка c:\new_dir существует");
    КонецЕсли;    
 
    /// Как удалить каталог вместе с содержимым в 1с 8.3, 8.2
 
    УдалитьФайлы("c:\new_dir");
    // мы опустили маску, поэтому удалятся все файлы
    // внутри каталога, а также сам каталог
 
    /// Как получить каталог временных файлов в 1с 8.3, 8.2
 
    Сообщить(
        КаталогВременныхФайлов()
    ); // например, c:\temp
 
КонецПроцедуры
 
&НаКлиенте
Процедура РаботаСВременнымХранилищем(Команда)
 
    // временное хранилище - объект, в который мы можем помещать
    // и считывать данные произвольного типа,
    // доступ к которому есть и на сервере и на клиенте
    // это позволяет передавать между сервером и клиентом
    // данные, которые иначе не передать
 
    /// Как сохранить произвольное значение во временное
    /// хранилище в 1с 8.3, 8.2
 
    Список = Новый СписокЗначений;
    Список.Добавить("Владивосток");
    Список.Добавить("Хабаровск");
    Список.Добавить("Петропавловск-Камчатский");
 
    АдресВХранилище = ПоместитьВоВременноеХранилище(
        Список // произвольные данные        
    );
 
    /// Как прочитать произвольное значение из временного
    /// хранилища в 1с 8.3, 8.2
 
    СписокИзХранилища = ПолучитьИзВременногоХранилища(АдресВХранилище);
    Если СписокИзХранилища = Неопределено Тогда
        Сообщить("Значение по этому адресу уже удалено из хранилища.");
    Иначе
        Сообщить(СписокИзХранилища[0]); // Владивосток
    КонецЕсли;
 
    /// Как перезаписать уже сохраненное значение во временном
    /// хранилище в 1с 8.3, 8.2
 
    Массив = Новый Массив;
    Массив.Добавить(10);
    Массив.Добавить(20);
 
    ПоместитьВоВременноеХранилище(
        Массив,
        АдресВХранилище
    );
 
    /// Сколько времени хранится значение, сохраненное во
    /// временном хранилище в 1с 8.3, 8.2
 
    // всё зависит от второго параметра функции ПоместитьВоВременноеХранилище
 
    // #1 если туда в качестве адреса был передан уникальный идентификатор формы
    // или уже существующий адрес в хранилище, то значение будет автоматически
    // удалено после закрытия формы
 
    // #2 если туда в качестве адреса передан уникальный идентификатор, не
    // являющийся уникальным идентификатором формы, то значение будет
    // автоматически удалено только после завершения сеанса пользвоателя    
 
    // #3 если адрес не указан, помещенное значение будет удалено после
    // очередного запроса сервера    
 
    // см. примеры ниже
 
    /// Как сохранить значение во временное хранилище на всё
    /// время жизни формы в 1с 8.3, 8.2
 
    ПоместитьВоВременноеХранилище(
        Массив,
        ЭтаФорма.УникальныйИдентификатор
    );
 
    /// Как сохранить значение во временное хранилище на всё
    /// время сеанса пользователя в 1с 8.3, 8.2
 
    АдресВХранилище = ПоместитьВоВременноеХранилище(
        Массив,
        Новый УникальныйИдентификатор
    );
 
    /// Как удалить значение из временного хранилища в 1с 8.3, 8.2
 
    УдалитьИзВременногоХранилища(АдресВХранилище);
 
    /// Как узнать является ли строка адресом во временном хранилище
    /// в 1с 8.3, 8.2
 
    Если ЭтоАдресВременногоХранилища(АдресВХранилище) Тогда
        Сообщить("Да, это адрес во временном хранилище.");
    КонецЕсли;
 
КонецПроцедуры
 
/// Как передать файл с клиента на сервер в 1с 8.3, 8.2
 
&НаКлиенте
Процедура ПередачаФайлаСКлиентаНаСервер(Команда)
 
    // создадим тестовый файл для передачи
    Текст = Новый ЗаписьТекста("c:\test.txt");
    Текст.ЗаписатьСтроку("Привет,");
    Текст.ЗаписатьСтроку("Мир!");
    Текст.Закрыть();
 
    ОповещениеОЗавершении = Новый ОписаниеОповещения(
        "ВыполнитьПослеПомещенияФайла", ЭтотОбъект
    );    
 
    НачатьПомещениеФайла(
        ОповещениеОЗавершении,
        , // адрес в хранилище
        "c:\test.txt", // имя файла
        Ложь, // интерактивно
        ЭтаФорма.УникальныйИдентификатор
    );
    // если опустить последний параметр, то помещенный файл
    // будет удален после очередного запроса сервера
    // а если указать - то только после удаления объекта формы
 
    // если нужно предоставить пользователю возможность
    // выбрать файл самому четвёртый параметр (интерактивно)
    // нужно установить в Истина
 
КонецПроцедуры
 
&НаКлиенте
Процедура ВыполнитьПослеПомещенияФайла(Результат, Адрес,
    ВыбранноеИмяФайла, ДополнительныеПараметры) Экспорт
 
    Если Результат Тогда
 
        // сохраним полученный адрес в реквизит формы
        АдресФайлаВХранилище = Адрес;
 
        Сообщить(
            "Наконец-то! Файл " +
            ВыбранноеИмяФайла + " передан на сервер и сохранён во " +
            "временном хранилище по адресу " + Адрес);
 
    Иначе
 
        Сообщить("Не удалось передать файл на сервер.");
 
    КонецЕсли;
 
КонецПроцедуры
 
/// Как прочитать файл на сервере из временного хранилища
/// в 1с 8.3, 8.2
 
&НаСервере
Процедура ПрочитатьФайлНаСервереИзХранилищаНаСервере()
 
    Если АдресФайлаВХранилище = "" Тогда
        Сообщить("Сначала нужно передать файл с клиента на сервер.");
        Возврат;
    КонецЕсли;
 
    ДвоичныеДанные = 
        ПолучитьИзВременногоХранилища(АдресФайлаВХранилище);
 
    Если ДвоичныеДанные = Неопределено Тогда
        Сообщить("Похоже файл уже был удалён из хранилища.");
        Возврат;
    КонецЕсли;
 
    ДвоичныеДанные.Записать("c:\server.txt");
 
    Текст = Новый ЧтениеТекста("c:\server.txt");
    Пока Истина Цикл
        Строка = Текст.ПрочитатьСтроку();
        Если Строка = Неопределено Тогда
            Прервать;
        Иначе
            Сообщить(Строка);
        КонецЕсли;
    КонецЦикла;
 
КонецПроцедуры
 
/// Как передать файл с сервера на клиент в 1с 8.3, 8.2
 
&НаКлиенте
Процедура ПередатьФайлССервераНаКлиент(Команда)
 
    Если АдресФайлаВХранилище = "" Тогда
        Сообщить("Сначала нужно сохранить файл на сервере.");
        Сообщить("Воспользуйтесь кнопкой 'Передача файла с клиента...'");
        Возврат;
    КонецЕсли;
 
    ОповещениеОЗавершении = Новый ОписаниеОповещения(
        "ВыполнитьПослеПолученияФайлов", ЭтотОбъект
    );
 
    ПолучаемыеФайлы = Новый Массив;
    ПолучаемыеФайлы.Добавить(
        Новый ОписаниеПередаваемогоФайла(
            "c:\from_server.txt", // куда сохранять на клиента
            АдресФайлаВХранилище // адрес в хранилище на сервере
        )
    );
 
    НачатьПолучениеФайлов(
        ОповещениеОЗавершении,
        ПолучаемыеФайлы,
        ,
        Ложь // интерактивно
    );
 
КонецПроцедуры
 
&НаКлиенте
Процедура ВыполнитьПослеПолученияФайлов(ПолученныеФайлы,
    ДополнительныеПараметры) Экспорт
 
    Для Каждого Файл Из ПолученныеФайлы Цикл
        Сообщить("Получен " + Файл.Имя + " из " + Файл.Хранение);
    КонецЦикла;
 
КонецПроцедуры
 
/// Скачать и выполнить эти примеры на компьютере

Работа с файловой системой

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

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

Управление программами

MS-DOS предоставляет программам возможность организовать запуск других программ или загрузку и выполнение программных оверлеев. Для этого служит функция 4Bh.

Для завершения работы программа должна также использовать одну из специальных функций MS-DOS. Функция 4Ch, завершая работу программы, позволяет передать операционной системе некоторое число, называемое кодом завершения программы. Это число может быть затем проанализировано в пакетном файле командой IF ERRORLEVEL. Если одна программа запускает другую, то первая может получить код завершения второй с помощью функции 4Dh.

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

В нашей книге мы приведем различные примеры запуска программ из программ и научимся составлять резидентные программы.

Управление памятью

MS-DOS управляет распределением памяти с помощью блоков управления памятью MCB (Memory Control Block). Вся память разбивается на фрагменты различного размера, которым предшествует блок MCB, содержащий характеристики данного фрагмента (например, такие, как его размер).

Программа может динамически получать и освобождать области памяти с помощью функций 48h и 49h, соответственно. Кроме того, можно изменять размер фрагмента памяти, выделенного операционной системой программе. Это делает функция 4Ah.

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

Связь с драйверами устройств

Мы уже обращали ваше внимание на то, что программы не могут обращаться непосредственно к драйверам периферийных устройств. Все обращения к драйверам имеют либо неявный характер (ввод/вывод с помощью функций прерывания INT 21h), либо используют специальную функцию MS-DOS с кодом 44h. Эта функция предназначена для обмена управляющей информацией между драйвером и программой.

Другие функции

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

1.6. Обработка ошибок

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

Перечислим коды ошибок, возвращаемые программе через регистр AX.

Код

Описание

01

Указан неправильный код функции

02

Файл не найден

03

Путь не найден

04

Слишком много открытых файлов

05

Доступ запрещен

06

Неправильный идентификатор

07

Разрушен блок управления памятью

08

Недостаточно памяти

09

Неправильный адрес блока памяти

0Ah

Неправильная среда

0Bh

Неправильный формат

0Ch

Неправильный доступ

0Dh

Неправильные данные

0Eh

Зарезервировано

0Fh

Ошибка при указании диска

10h

Невозможно удалить текущий каталогтекущий каталог

11h

Другое устройство

12h

Больше нет файлов

Для MS-DOS версии 3.0 и более поздних версий обработка ошибок значительно расширена. Введена функция 59h, предназначенная для получения дополнительной информации об ошибках.

При вызове этой функции регистр BX должен содержать индикатор уровня анализа ошибок, который должен быть равен 0. Кроме расширенного кода ошибки, возвращаемого в регистре AX, программа может получить класс ошибки (регистр BH), код предполагаемых действий (регистр BL), локализацию ошибки (регистр CH).

К сожалению, эта функция разрушает содержимое регистров CL, DX, SI, DI, BP, DS, ES. Программа, использующая функцию 59h прерывания INT 21h, должна позаботиться о сохранении содержимого этих регистров.

Расширенный код ошибки, возвращаемый в регистре AX, может принимать значения, указанные ниже. Коды от 1 до 12h эквивалентны кодам, рассмотренным ранее и второй раз не приводятся.

Код

Описание

13h

Выполнена попытка записи на защищенный от записи диск

14h

Указан неизвестный идентификатор устройства

15h

Диск не готов

16h

Неизвестная команда

17h

Ошибка циклического кода проверки

18h

Неправильная длина структуры запроса

19h

Ошибка при поиске

1Ah

Неизвестен тип среды носителя данных

1Bh

Сектор не найден

1Ch

Кончилась бумага в принтере

1Dh

Ошибка записи

3Eh

Ошибка чтения

1Fh

Общая ошибка

20h

Ошибка при доступе к совместно используемому файлу

21h

Нарушение блокировки файла

22h

Неправильный диск

23h

FCBFCB недоступен (слишком много блоков FCB)

24h

Переполнился буфер, предназначенный для совместного доступа к файлам

25h

Несоответствие кодовых страниц

26h

Ошибка при обработке конца файла

27h

Переполнение диска

28h — 31h

Зарезервировано

32h

Сетевая функция не поддерживается

33h

Удаленный компьютер не отвечает

34h

Дублирование имени в сети

35h

Сетевое имя не найдено

36h

Сеть занята

37h

Сетевое устройство больше не существует

38h

Слишком много команд

39h

Ошибка в аппаратуре сетевого адаптера

3Ah

Неправильный ответ из сети

3Bh

Непредусмотренная ошибка сети

3Ch

Несовместимый удаленный адаптер

3Dh

Переполнена очередь печати

3Eh

Мало места в очереди печати

3Fh

Печать отменена

40h

Сетевое имя было удалено

41h

Доступ к сетевому ресурсу запрещен

42h

Неправильный тип сетевого устройства

43h

Сетевое имя не найдено

44h

Слишком много сетевых имен

45h

Слишком много сеансов связи

46h

Совместное использование ресурсов в сети временно отменено

47h

Сетевой запрос отвергнут

48h

Переадресация приостановлена

49h — 4Fh

Зарезервировано

50h

Файл уже существует

51h

Дублирование блока FCBFCB

52h

Невозможно создать дескриптор в каталоге

53h

Ошибка обработчика критических ошибок INT 24hINT 24h

54h

Слишком много переназначений

55h

Двойное переназначение

56h

Неправильный пароль

57h

Неправильный параметр

58h

Ошибка при записи данных в сети

59h

Нет такой функции в сети

5Ah

Не установлен необходимый компонент системы

Класс ошибки, передаваемый в регистре BH, содержит информацию, которая поможет вам обработать данную ошибку:

Класс ошибки

Описание

1

Недостаточно ресурсов: блоков FCBFCB, памяти и т. д.

2

Временная ситуация, попробуйте повторить операцию позже

3

Нет прав доступа

4

Внутренняя ошибка MS-DOS

5

Ошибка аппаратуры

6

Системная ошибка MS-DOS

7

Ошибка в прикладной программе

8

Файл или объект не найден

9

Неправильный формат файла или объекта

10

Файл или объект заблокирован

11

Ошибка носителя данных

12

Файл или объект уже существует

13

Прочие ошибки

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

Код

Рекомендуемые действия

1

Повторить операцию позже. Можно спросить пользователя, желает он повторить операцию или завершить работу программы

2

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

3

Если пользователь вводил какие-то данные для MS-DOS, следует попросить его ввести эти данные еще раз (например, пользователь мог указать неправильный идентификатор диска или путь доступа к файлу)

4

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

5

Немедленный выход из программы без выполнения завершающих действий. Система находится в непредсказуемом состоянии

6

Следует игнорировать ошибку

7

Повторить операцию, после того как пользователь выполнит требуемые действия (установит дискету и т. п.)

Сведения о локализации ошибки передаются в регистре CH. Приведем список кодов локализации:

Код

Место, где произошла ошибка

1

Система не знает, где произошла ошибка

2

В устройстве, выполняющем обмен данными отдельными блоками (диск или магнитная лента)

3

Ошибка связана с сетью

4

В символьном устройстве, например, в принтере

5

Ошибка связана с оперативной памятью

Если ваша программа составлена на языке ассемблера, то после обращения к MS-DOS через прерывание следует проверить состояние флага переноса:

int 21h

jc error

MS-DOS имеет еще одно средство для обработки ошибок — обработчик критических ошибок (Critical Error Handler). Этот модуль вызывается MS-DOS, когда она получает сообщение об ошибке от драйвера устройства.

Модуль выдает на экран хорошо известное вам сообщение:

Abort, Retry, Fail?

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

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

А теперь расскажем более подробно о том, как программа может вызывать прерывания MS-DOS.

Работа с файловой системой ОС Windows

Способы копирования

Существует два основных способа копирования файлов:

  • копирование перетаскиванием;
  • копирование через буфер обмена.

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

Рисунок 1.

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

Рисунок 2.

  1. Вызвать контекстное меню файла и выбрать в нем один из пунктов: либо «Копировать», либо «Вырезать». Если выбран пункт «Копировать», то файл останется по своему старому адресу, а его копия появится в новом месте. Если выбрать «Вырезать», то файл будет удален по старому адресу, но его копия появится в новом месте.
  2. Открыть окно папки или раздела диска, куда необходимо поместить копию.
  3. Вызвать в этом окне контекстное меню, щелкнув правой кнопкой мыши на пустом месте.
  4. Выбрать в контекстном меню пункт «Вставить».

Копирование группы объектов

Если требуется скопировать несколько объектов (файлов или папок) сразу, то алгоритм копирования следует немного изменить. Здесь возможны три способа выделения нужных объектов.

  • Способ 1. При выделении нужных объектов левой кнопкой мыши нужно удерживать клавишу Ctrl на клавиатуре. Этот способ позволяет выделять объекты выборочно.
  • Способ 2. При выделении нужных объектов удерживается клавиша Shift на клавиатуре. При этом мышкой нужно указать только первый объект и последний объект. В результате выделится вся группа между первым и последним объектами.

Рисунок 3.

  • Способ 3. При удержании левой кнопки мыши «нарисовать» прямоугольник, в который попадут нужные объекты. Клавиатура при этом способе не используется.

Рисунок 4.

После того как нужные объекты выделены одним из перечисленных способов, можно:

  • либо вызвать контекстное меню щелчком правой кнопки мыши на любом из выделенных объектов и выполнить копирование через буфер обмена;
  • либо выполнить перетаскивание всей группы.

Удаление и восстановление файлов

Файл, папку или группу объектов можно удалить. Для этого нужно выбрать в контекстном меню пункт «удалить». Однако, такое удаление не является полным. Объект еще подлежит восстановлению. Удаленный объект переносится в специальную папку «Корзину». «Корзина» обычно всегда присутствует на рабочем столе Windows. Файлы и папки из «Корзины» еще могут быть восстановлены. Для этого нужно открыть окно «Корзины», найти в ней нужный объект, вызвать его контекстное меню и выбрать в нем пункт «Восстановить».

Рисунок 5.

Файл или папка исчезнет из «Корзины» и вновь вернется в то место файловой системы, откуда был изначально удален.

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

Рисунок 6.

Замечание 1

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

Работа с файловой системой Linux

Во время выполнения различных задач по администрированию системы может понадобится работать с файловой системой Linux, форматировать разделы, изменять их размер конвертировать файловые системы, может понадобиться дефрагментация в Linux или восстановление файловых систем. Многие из этих действий выполняются в графическом интерфейсе, многие и вовсе автоматически. Но может возникнуть ситуация, в которой придется делать все через терминал. Также при администрировании удаленных серверов работать с ними приходится только через ssh, а это означает недоступность графического интерфейса.

В этой статье мы рассмотрим как выполняется работа с файловой системой Linux в терминале. За основу возьмем семейство файловых систем ext2/3/4, так как они самые распространенные среди большого многообразия дистрибутивов Linux.

Содержание статьи:

Основные команды

Для управления файловой системой ext в Linux используется целый набор команд из пакета e2progs. Сюда входят как команды для управления флагами файлов, создания и изменения файловых систем, так и утилиты для отладки файловой системы.

Рассмотрим основные утилиты, которые будем использовать:

  • badblocks — если у вас старый жесткий диск и на нем накопилось много битых блоков, вы можете с помощью этой утилиты пометить их все на уровне файловой системы, чтобы больше не использовать.
  • e2label — позволяет изменить метку раздела с файловой системой ext.
  • fsck — проверка файловой системы linux и исправление найденных ошибок
  • mkfs — позволяет создать файловую систему Linux.
  • resize2fs — изменить размер раздела с файловой системой
  • tune2fs — позволяет изменить файловую систему Linux, настроить ее параметры.

А теперь будет рассмотрена работа с файловой системой linux на примерах.

Работа с файловой системой в Linux

Перед тем как переходить к работе с реальным жестким диском важно попрактиковаться. Если сменить метку или проверить на битые сектора можно и рабочий диск, то создавать новую файловую систему, изменять ее размер, рискуя потерять данные на реальном диске не рекомендуется. Можно отделить небольшой раздел диска для экспериментов с помощью Gparted и выполнять все действия в нем. Допустим, у нас этот раздел будет называться /dev/sda6.

Создание файловой системы

Создать файловую систему linux, семейства ext, на устройстве можно с помощью команды mkfs. Ее синтаксис выглядит следующим образом:

sudo mkfs -t тип устройство

Доступны дополнительные параметры:

  • — проверить устройство на наличие битых секторов
  • -b — размер блока файловой системы
  • -j — использовать журналирование для ext3
  • -L — задать метку раздела
  • -v — показать подробную информацию о процессе работы
  • -V — версия программы

Создаем файловую систему на нашем устройстве. Будем создавать ext3:

 sudo mkfs -t ext4 -L root /dev/sda6

Creating filesystem with 7847168 4k blocks and 1962240 inodes

Filesystem UUID: 3ba3f7f5-1fb2-47af-b22c-fa4ca227744a
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000

Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done  

Изменение метки файловой системы

Утилита e2label позволяет изменить или посмотреть метку раздела диска. Принимает всего два параметра — устройство и новую метку если нужно.

Смотрим метку:

sudo e2label /dev/sda6

root

Устанавливаем новую:

sudo e2label /dev/sda6 root1

Настройка файловой системы linux

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

Синтаксис команды очень прост:

$ tune2fs опции устройство

Поддерживаются следующие опции:

  • -j — создать файл журнала. Позволяет превратить файловую систему ext2 в ext3.
  • -J — настроить параметры журнала
  • -l — получить содержимое суперблока
  • -L — изменить метку раздела
  • -m — изменить процент дискового пространства, зарезервированного для суперпользователя
  • -M — изменить последнюю папку монтирования
  • -U — задать UUID файловой системы
  • -C — изменить значение счетчика монтирования
  • -T — изменить последнюю дату проверки файловой системы
  • — изменить периодичность проверок файловой системы с помощью fsck
  • -O — изменить опции файловой системы.

Изменить размер зарезервированного места для суперпользователя до пяти процентов:

sudo tune2fs -m 5 /dev/sda6

Setting reserved blocks percentage to 5% (392358 blocks)

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

Filesystem volume name:   root
Last mounted on:          /
Filesystem UUID:          3ba3f7f5-1fb2-47af-b22c-fa4ca227744a
Filesystem magic number:  0xEF53
Filesystem revision #:    1 (dynamic)
Filesystem features:      has_journal ext_attr resize_inode dir_index filetype extent flex_bg spar
se_super large_file huge_file uninit_bg dir_nlink extra_isize
Filesystem flags:         signed_directory_hash
Default mount options:    user_xattr acl
Filesystem state:         clean
Errors behavior:          Continue
Filesystem OS type:       Linux

Изменить счетчик количества монитрований:

tune2fs -C 0 /dev/sda6

Setting current mount count to 0

Думаю тут смысл понятен, нужно только немного со всем этим поэкспериментировать.

С помощью опции -O мы вообще можем превратить нашу ext3 в ext4 следующей командой:

sudo tune2fs -O extents,uninit_bg,dir_index

После этого действия нужно выполнить проверку файловой системы на ошибки в fsck. Подробнее об этом поговорим ниже.

sudo fsck -np /dev/sda6

Таким образом вы можете изменить файловую систему linux, и настроить по своему усмотрению любые ее параметры.

Изменение размера файловой системы Linux

Раньше такая функция поддерживалась в утилите parted, но потом ее убрали и для этого действия приходится использовать утилиту из набора e2fsprogs — resize2fs.

Запустить утилиту очень просто. Ей нужно передать всего два параметра:

$ resize2fs [опции] устройство размер

Доступны также опции:

  • -M уменьшить файловую систему до минимального размера
  • -f — принудительное изменение, не смотря на потерю данных
  • -F — очистить буфер файловой системы

Размер передается, как и во многих других утилитах, целым числом с указанием единиц измерения, например, 100М или 1G.

Для примера уменьшим размер нашего раздела до 400 Мегабайт:

sudo resize2fs /dev/sda6 400M

Resizing the filesystem on /dev/sda7 to 102400 (4k) blocks.
The filesystem on /dev/sda7 is now 102400 blocks long

Проверка файловой системы Linux

При неправильном отключении носителей или неожиданном отключении питания, файловая система Linux может быть повреждена. Обычно проверка корневой файловой системы и домашнего каталога на ошибки выполняется во время загрузки. Но если эта проверка не была выполнена или нужно поверить другой носитель, придется все делать вручную. Для этого есть утилита fsck.

Синтаксис fsck:

$ fsck [опции] устройство

Опции программы:

  • -p — автоматическое восстановление
  • -n — только проверка, без восстановления
  • -y — ответить да на все запросы программы
  • — проверить на битые сектора (аналог badblocks
  • -f — принудительная проверка, даже если раздел помечен как чистый
  • -j — внешний журнал файловой системы

Проверка файловой системы Linux выполняется такой командой, проверим диск /dev/sda6, заметьте, что диск должен быть не примонтирован:

sudo fsck -a /dev/sda6

root: clean, 11/32704 files, 37901/102400 blocks

 Дефрагментация файловой системы

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

e4defrag /dev/sda6

Чтобы проверить нужна ли дефрагментация в Linux выполните эту же команду с опцией -c:

Total/best extents                             26247/24953
Average size per extent                        1432 KB
Fragmentation score                            0
[0-30 no problem: 31-55 a little bit fragmented: 56- needs defrag]
This device (/dev/sda6) does not need defragmentation.
Done.

В поле Fragmentation score отображен процент фрагментации, как видите, у меня 0, нормой считается до 30, 31-55 небольшие проблемы, и больше 56 — нужна дефрагментация.

Выводы

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

Оцените статью:

Загрузка…

8. Файловая система компьютера. Основные приёмы работы с файловой с.Пк

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

ОС MS-DOS, OS/2, Windows-95/NT реализуют 16-разрядные поля в FAT-таблицах. Такая система называлась FAT-16. Такая система позволяет разместить не более 65536 записей о местоположении единиц хранения данных. Наименьшей единицей хранения данных является сектор. Размер сектора равен 512 байтам. Группы секторов условно объединяют вкластеры, которые являются наименьшей единицей адресации к данным. Размер кластера зависит от емкости диска: в Fat-16 для дисков от 1 до 2 Гбайт 1 кластер занимает 64 сектора или 32 Кбайта. Это нерационально, поскольку даже маленький файл занимает 1 кластер. У больших файлов, занимающих несколько кластеров, в конце образуется незаполненный кластер. Поэтому потери емкости для дисков в системе FAT-16 могут быть очень велики. С дисками свыше 2,1 Гбайт FAT-16 вообще не работает.

В Windows 98 и старших версиях реализована более совершенная файловая система — FAT-32 с 32-разрядными полями в таблице размещения файлов. Она обеспечивает маленький размер кластера для дисков большой емкости. Например, для диска до 8 Гбайт 1 кластер занимает 8 секторов (4 Кбайта).

Файл— это именованная последовательность байтов произвольной длины. До появления Windows-95 общепринятой схемой именования файлов была схема 8.3 (короткое имя) – 8 символов собственно имя файла, 3 символа – расширение его имени.  Недостаток коротких имен — их низкая содержательность. Начиная с Windows-95 введено понятие длинного имени (до 256 символов). Оно может содержать любые символы, кроме девяти специальных: \ / : * ? » < > |.

Расширением именисчитаются все символы после последней точки. В современных операционных ситемах расширение имени несет для системы важную информацию о типе файла. Типы файлов регистрируются и связывают файл с открывающей его программой. Например файл MyText.doc будет открыт текстовым процессором Word, поскольку расширение .doc обычно связывается именно с этим приложением. Обычно, если файл не связан ни с какой открывающей программой, то на его значке обозначен флаг — логотип Microsoft Windows, а открывающую программу пользователь может указать сам, выбрав ее из предоставленного ОС списка.

Логически структура файлов организована по иерархическому принципу: папки более низких уровней вкладываются в папки более высоких уровней. Верхним уровнем вложенности является корневой каталог диска. Термины «папка» и «каталог» равнозначны. Каждому каталогу файлов на диске соответствует одноименная папка операционной системы. Однако, понятие папки несколько шире. Так в Windows-95 существуют специальные папки, осуществляющие удобный доступ к программам, но которым не соответствует ни один каталог диска.

Атрибуты файлов — это параметры, определяющие некоторые свойства файлов. Для получения доступа к атрибутам файла, следует щелкнуть правой кнопкой мыши по его значку и выбрать меню Свойства. Основных атрибутов 4: «Только для чтения», «Скрытый», «Системный», Архивный». Атрибут «Только для чтения» предполагает, что файл не предназначен для внесения изменений. Атрибут «Скрытый» говорит о том, что данный файл не следует отображать на экране при проведении файловых операций. Атрибутом «Системный» помечаются наиболее важные файлы ОС (как правило они имеют и атрибут «Скрытый»). Атрибут «Архивный» связан с резервным копированием файлов и особого значения не имеет.

Основные приемы работы с файловой системой ПК :

Копирование и перемещение

    1 способ.Разместить на рабочем столе два окна: источник и приемник копирования. Выделить в окне-источнике необходимые значки. Несколько значков выделяются при нажатой клавише Ctrl. Перетащить мышью выделенные значки в окно-приемник, указав на любой из выделенных значков. При одновременно нажатой клавише Ctrl происходит копирование, без нее — перемещение элементов (при условии, что папки находятся на одном диске).

    2 способ. Выделить копируемые элементы. Выбрать меню Правка/Копировать (Вырезать). При выборе «Вырезать» произойдет перемещение. Открыть папку-приемник. Выбрать меню Правка/Вставить.

Удаление файлов и папок

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

Групповые операции с файлами

    Если требуется выполнить операцию копирования или удаления с большим количеством файлов одновременно, то выделять их удерживая Ctrl не очень удобно. Можно выделить целую группу подряд идущих значков, щелкнув по первому их них и при нажатой клавише Shift — по последнему. Однако, в этом случае требуется определенным образом упорядочить значки. Для этого следует открыть папку с файлами и обратиться к меню Вид/Упорядочить значки. Существует 4 способа упорядочивания значков в папке: по имени, по типу, по размеру, по дате. Например, необходимо скопировать все файлы с расширением .txt. В этом случае следует упорядочить значки по типу, после чего все файлы типа .txt будут сгруппированы вместе и использовать клавишу Shift для их выделения. Аналогичный прием применяется для выделения «старых» файлов (упорядочение по дате), «маленьких» (упорядочение по размеру) и в других стандартных ситуациях.

Если в окне не показана полная информация о файлах (расширение, объем и дата создания), следует обратиться к меню окна папки Вид/Таблица и в окне будут выведены все характеристики файлов.

Переименование файлов и папок.

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

Замечание. Удаление или переименование невозможно, если указанный файл уже открыт каким-либо приложением.

«Работа с файловой структурой операционной системы»

Практическая работа №6

«Работа с файловой структурой операционной системы»

Цели урока:

Личностные: развивать логическоемышление,

Обучающая: Закрепить знания по основным понятиям и технологии работы с файловой системой ОС;

Развивающая: Развивать практические навыки работы с файловой системой ОС средствами файлового менеджера;

Воспитывающая Воспитывать информационную культуру обучающихся, самоконтроль и внимание, толерантность друг к другу

Задачи:совершенствовать умения и навыки работы с файловой структурой ОС в среде менеджера.

Методы: развивающее обучения, тестовая технология, ИКТ

Тип урока: урок закрепления знаний и технологии работы с файловой структурой ОС

Форма урока: практическая

Оборудование: компьютерный класс


Ход урока.

  • Организационный момент.
  • Проверка и актуализация знаний (фронтальный опрос).
  • Практическая часть.
  • Рефлексия
  • Итоги урока.

Приветствие, проверка присутствующих. ТБ ,Мотивация ;
Тема нашего урока: «Файл и файловая структура » и прежде всего хочется начать его со слов Я. Коменского: «Вечным законом да будет: учиться и научиться всему через примеры, наставления и применения на деле».

На прошлом уроке выизучилитему «Файл и файловая структура».

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

  1. В чем заключается назначение программы Проводник?
  2. Что называется файлом ?
  3. Что такое расширение файла?
  4. Какие правила есть при написании файла?

Хорошо, сейчас проверим ваши знания с помощью цифрового теста (ЭОР).

Молодцы! А теперь приступим к практики !

На слайде показаны цели практической работы.

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

«Работа с файловой структурой через Проводник»

  1. Запустить программу Проводник
  2. В папке Мои документы создать структуру папок:
    Республика Крым – Кандалакша – Дом Адрес — ФИО
  3. В папке Дом Адрес создать Текстовый документ, дать ему имя Мой домашний адрес и записать в него соответствующую (вымышленную ) информацию
  4. В папке ФИО создать Документ, дать ему имя своих первых букв ФИО, записать в него свою Фамилию, Имя, Отчество, дату рождения
  5. В папке МОЯ Профессия создать структуру папок
  6. В папке Специальность создать Текстовый документ с именем
  7. Мои Уроки и перечислить в нём эти дисциплины.
  8. Создайте ярлык для папки на Рабочем столе
  9. Для любых двух документов из папки Мои документы создайте ярлыки. Один переместите в папку Республика Крым, второй в папку ФИО
  10. В папке КИК создать следующую файловую структуру по примеру
  11. Папку Программное обеспечение скопировать в папку Республика Крым и переименовать, дав ей имя ПО.
  12. На Рабочем столе создать ярлык для папки Республика Крым, и переименовать в Моя работа.
  13. Скопировать на диск D: папку Республика Крым.
  14. На диске D: создать текстовый документ и записать в него полное имя файла Текстовый процессор Word.
  15. Продемонстрировать работу.

Пришли ли мытем целям, которые мы поставили в начали урока ?
Что нового вы открыли для себя?

За практическую работу оценки узнаете на следующем уроке

Спасибо за работу на уроке, до свидания!

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

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

ФункцияКраткое описание
chdirизменение текущего рабочего каталога
getcwdполучить имя текущего рабочего каталога
mkdirсоздать новый каталог
rmdirудаление каталога

Система программирования ТС предоставляет, кроме перечисленных, следующие функции:

ФункцияКраткое описание
findfirstначало поиска файла по шаблону имени
findnextпродолжение поиска файла по шаблону имени
fnmergeсоздание имени файла из отдельных компонент
fnsplitразбиение имени файла на отдельные компоненты
getcurdirузнать текущий каталог
getdiskузнать текущее устройство
searchpathпоиск файла в различных каталогах
setdiskзадать текущее устройство

В системе программирования MSC прототипы функций содержатся в файле direct.h, в системе программирования ТС прототипы функций содержатся в файле dir.h.

Поделитесь на страничке

Следующая глава >

Leave a comment