Главная    Почта    Новости    Каталог    Одноклассники    Погода    Работа    Игры     Рефераты     Карты
  
по Казнету new!
по каталогу
в рефератах

Модель файловой системы FAT

t;" 'подготовка диалога
"Добавление файла"
    DialogSheets("Add").EditBoxes("Size").Text = "" 'очистка полей ввода
    Sheets("Add").Show 'Вызов диалога "Добавление файла"
    With DialogSheets("Add") 'Проверка на правильность введенных данных
        If (.EditBoxes("Name").Text = "") Or (.EditBoxes("Size").Text = "")
Or (.EditBoxes("Size").Text = "0") Then Exit Sub
    End With
    Dim NewFile As FileID 'Экземпляр переменной с описанием создаваемого
файла
    With DialogSheets("Add")
        NewFile.Name = .EditBoxes("Name").Text
        NewFile.Size = .EditBoxes("Size").Text
    End With
    Call AddFile(NewFile) 'Вызов процедуры добавления файла
    Refresh 'обновили графическое изображение размещения файлов
End Sub

Sub PressDeleteFile() 'в основном рабочем листе нажата кнопка Удалить Файл
    temp = 4
    With DialogSheets("Delete") 'подготавливаем к работе диалог Delete
        .ListBoxes("Name").RemoveAllItems
        While Sheets("Sheet").Cells(temp; 2) <> "" 'заполняем список
имеющимися в каталоге файлами
            .ListBoxes("Name").AddItem
Text:=Worksheets("Sheet").Cells(temp; 2).Value; Index:=temp - 3
            temp = temp + 1
        Wend
        .Show 'показываем диалог Delete
        If .ListBoxes("Name") = 0 Then Exit Sub
        Dim File As FileID 'переменная для идентификатора удаляемого
файла.Передается процедуре DeleteFile
        File.Name = Sheets("Sheet").Cells(.ListBoxes("Name") + 3; 2)
        File.Size = Sheets("Sheet").Cells(.ListBoxes("Name") + 3; 3)
        File.First = Sheets("Sheet").Cells(.ListBoxes("Name") + 3; 4)
        Call DeleteFile(File) 'Вызываем процедуру удаления файла
        Refresh 'обновили графическое изображение размещения файлов
    End With
End Sub

Sub PressRemakeFile() 'нажата кнопка Изменить_размеры_файла
'по этому поводу подготавливаем к работе диалог Remake
    temp = 4
    With DialogSheets("Remake")
        .ListBoxes("Name").RemoveAllItems
        .EditBoxes("Size").Text = ""
        While Sheets("Sheet").Cells(temp; 2) <> "" 'заполняем список
имеющимися в каталоге файлами
            .ListBoxes("Name").AddItem
Text:=Worksheets("Sheet").Cells(temp; 2).Value; Index:=temp - 3
            temp = temp + 1
        Wend
    .Show 'показываем диалог Remake
    'при нажатии кнопки OK в диалоге запустится макрос DialogRemakePressOK
    End With
End Sub

Sub DialogRemakePressName() 'в диалоге Перезапись выбран файл из списка
    With DialogSheets("Remake") 'и поэтому в диалоге Перезапись обновляем
поле размера файла в соотв. с выбранным файлом
        .EditBoxes("Size").Text = Sheets("Sheet").Cells(3 +
.ListBoxes("Name").ListIndex; 3).Value
    End With
End Sub

Sub DialogRemakePressOK() 'в диалоге изменение размеров файла нажата кнопка
OK
    With DialogSheets("Remake")
        .Hide 'убрали с экрана диалог
        If .ListBoxes("Name").ListIndex = 0 Then Exit Sub
        Dim File As FileID 'Экземпляр типа FileID - идентификатор файла
        File.Name = Sheets("Sheet").Cells(3 + .ListBoxes("Name").ListIndex;
2).Text
        File.Size = Sheets("Sheet").Cells(3 + .ListBoxes("Name").ListIndex;
3).Value
        File.First = Sheets("Sheet").Cells(3 +
.ListBoxes("Name").ListIndex; 4).Value
        'проверка на наличие изменений
        If .EditBoxes("Size").Text = File.Size Or .EditBoxes("Size").Text =
"0" Then Exit Sub
        'проверка на помещаемость
        If .EditBoxes("Size").Text > (FreeSize + ((File.Size - 1)  8 + 1)
* 8) Then
            temp = MsgBox("Файл " & File.Name & " размером " &
.EditBoxes("Size").Text & " не может быть размещен"; vbExclamation;
"Перезапись файла")
            Exit Sub
        End If 'перезапись: удаление, а затем запись файла, но с другим
размером
        Call DeleteFile(File) 'удалили
        File.Size = .EditBoxes("Size").Text 'изменили размер
        Call AddFile(File) 'записали
        Refresh 'обновили таблицу распределения файлов
    End With
End Sub

Sub Visualisation() 'визуализация файла
    temp = 4
    With DialogSheets("Visualisation") 'подготавливаем к работе диалог
Visualisation
        .ListBoxes("Name").RemoveAllItems
        While Sheets("Sheet").Cells(temp; 2) <> "" 'заполняем список
имеющимися в каталоге файлами
            .ListBoxes("Name").AddItem
Text:=Worksheets("Sheet").Cells(temp; 2).Value; Index:=temp - 3
            temp = temp + 1
        Wend
        .Show 'показываем диалог Visualisation
        If .ListBoxes("Name") = 0 Then Exit Sub 'выбрали ли что-нибудь ?
        Dim NumberFile As Integer
        NumberFile = .ListBoxes("Name").ListIndex 'номер по каталогу
визуализируемого файла
        Sheets("Sheet").Cells(NumberFile + 3; 2).ShowDependents 'показываем
линии, проходящие от ячейки каталога с именем визуализируемого файла до
всех занятых им ячеек области файлов
    End With
End Sub

                               Базовые события

Const ColorOfPaper = 33 'цвет фона области файлов
Const ColorUsedPartOfFAT = 2 'цвет занятой части области файлов

Sub AddFile(NewFile As FileID) 'Процедурa добавления файла
    'Проверка наличия присутствия в достаточном для создания файла
количестве свободного пространства
    If NewFile.Size > FreeSize Then
        temp = MsgBox("Файл " + NewFile.Name + " не может быть размещен из-
за нехватки свободного места."; vbExclamation; "Процесс создания файла")
        Exit Sub
    End If
    count = NewFile.Size 'счетчик уже записанной части файла
    NewFile.First = NextFreeCellFAT ' задание точки входа в FAT для данного
файла
    Dim PreviousCellFAT As Integer 'Номер последней модифицировавшейся
ячейки FAT
    PreviousCellFAT = NextFreeCellFAT
    Call ToFAT(PreviousCellFAT; 0) 'Записали в нее ноль-признак того, что
это последний (пока) кластер данного файла
    count = count - 8 'как минимум 8 байт файла уже размещены
    While count > 0 'пока весь файл не разместился
        Call ToFAT(PreviousCellFAT; NextFreeCellFAT) 'в последнюю
модифицировавшуюся ячейку FAT вносим указатель на следующую свободную
ячейку
        PreviousCellFAT = NextFreeCellFAT
        Call ToFAT(PreviousCellFAT; 0) 'Записали в нее ноль-признак того,
что это последний (пока) кластер данного файла
        count = count - 8 'как минимум 8 байт файла уже размещены
    Wend
    Call AddFileToCatalog(NewFile) 'добавили файл в каталог
End Sub

Sub DeleteFile(File As FileID) 'процедура удаляет заданный файл без
разговоров
    Call DeleteCellFromFAT(File.First)
    Call DeleteFileFromCatalog(File.Name)
End Sub

Sub Refresh() 'обновление изображения области файлов
    With Sheets("Sheet")
        .Range("F6:U13").Interior.ColorIndex = ColorOfPaper 'окрасили
область файлов в цвет фона
        .Range("F6:U13").Value = "" 'очистили все ячейки области файлов
        .Range("F6:U13").NumberFormat = "0" 'формат числа для области
файлов-целые числа
        .ClearArrows 'убрали все стрелки
        Dim PointerToFile As String
        NumberFile = 1
        While .Cells(NumberFile + 3; 2) <> "" 'последовательно
просматриваем область файлов. Для каждого файлавыполняется следующая
процедура:
            NumberCellFAT = .Cells(NumberFile + 3; 4) 'точка входа в FAT N-
ного файла
            PointerToFile = "=R" & NumberFile + 3 & "C2" 'указатель на
ячейку каталога с именем N-ного файла
            Relation = (.Cells(NumberFile + 3; 3) - 1) Mod 8 'смещение.
Являет собой размер неполностью заполненного кластера
            While .Cells(3; NumberCellFAT + 5) <> 0 'просмотр FAT до
признака конца цепочки
                .Range(Cells(6; NumberCellFAT + 5); Cells(6 + 7;
NumberCellFAT + 5)).Interior.ColorIndex = ColorUsedPartOfFAT + NumberFile
'выделение цветом очередного непоследнего кластера N-ного файла
                .Range(Cells(6; NumberCellFAT + 5); Cells(6 + 7;
NumberCellFAT + 5)).Font.ColorIndex = ColorUsedPartOfFAT + NumberFile
                .Range(Cells(6; NumberCellFAT + 5); Cells(6 + 7;
NumberCellFAT + 5)).Formula = PointerToFile 'каждая ячейка этого кластера
теперь указывает на ячейку с именем файла в каталоге
                NumberCellFAT = .Cells(3; NumberCellFAT + 5) 'взяли
следующую ячейку FAT из цепочки
            Wend 'теперь обработка последнего кластера N-ного файла.
Отличается тем, что он может быть занят не полностью
            .Range(Cells(6; NumberCellFAT + 5); Cells(6 + Relation;
NumberCellFAT + 5)).Interior.ColorIndex = ColorUsedPartOfFAT + NumberFile
            .Range(Cells(6; NumberCellFAT + 5); Cells(6 + Relation;
NumberCellFAT + 5)).Font.ColorIndex = ColorUsedPartOfFAT + NumberFile
            .Range(Cells(6; NumberCellFAT + 5); Cells(6 + Relation;
NumberCellFAT + 5)).Formula = PointerToFile

            NumberFile = NumberFile + 1 'работаем со следующим файлом
        Wend
123
скачать работу

Модель файловой системы FAT

 

Отправка СМС бесплатно

На правах рекламы


ZERO.kz
 
Модератор сайта RESURS.KZ