Добавил:
Upload
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:
Консольний додаток CatFile.exe, що виконує конкатенацію 2-х файлів
(додавання вмісту другого файлу в кінець першого). Параметри
передають в командному рядку: CatFile.exe [path]file1 [path]file2.
Загальний алгоритм
1. Отримати параметри командного рядка.
2. Оскільки у file1 буде виконуватися запис, то зняти можливий
атрибут "тільки для читання".
3. Відкрити file1 і переставити файловий покажчик в кінець файла
4. Відкрити file2.
5. Виконувати послідовне читання з file2 в буфер та запис з буфера
в file1.
6. Закрити файли.
Очевидно, що під час виконання операцій читання/запису найбільш
зручною кількістю байтів для обміну з дисковою підсистемою буде число,
кратне одиниці розподілу дискового простору (кластера). Отже, і розмір
буфера в програмі треба визначати таким що дорівнює або кратним
розміру кластера. Але цей розмір заздалегідь невідомий і до того ж може
розрізнятися для різних томів. Можна визначити в секції неініціалізованих
даних дуже великий буфер, а потім, після одержання розміру кластера,
використовувати лише його частину. Але в цій програмі взагалі ніяких
буферів під файлові операції не резервується, а необхідна пам'ять буде
отримана динамічно за допомогою виклику VirtualAlloc після визначення
розміру кластера того диска, на якому розташовано файл, до якого буде
виконуватися запис.
(додавання вмісту другого файлу в кінець першого). Параметри
передають в командному рядку: CatFile.exe [path]file1 [path]file2.
Загальний алгоритм
1. Отримати параметри командного рядка.
2. Оскільки у file1 буде виконуватися запис, то зняти можливий
атрибут "тільки для читання".
3. Відкрити file1 і переставити файловий покажчик в кінець файла
4. Відкрити file2.
5. Виконувати послідовне читання з file2 в буфер та запис з буфера
в file1.
6. Закрити файли.
Очевидно, що під час виконання операцій читання/запису найбільш
зручною кількістю байтів для обміну з дисковою підсистемою буде число,
кратне одиниці розподілу дискового простору (кластера). Отже, і розмір
буфера в програмі треба визначати таким що дорівнює або кратним
розміру кластера. Але цей розмір заздалегідь невідомий і до того ж може
розрізнятися для різних томів. Можна визначити в секції неініціалізованих
даних дуже великий буфер, а потім, після одержання розміру кластера,
використовувати лише його частину. Але в цій програмі взагалі ніяких
буферів під файлові операції не резервується, а необхідна пам'ять буде
отримана динамічно за допомогою виклику VirtualAlloc після визначення
розміру кластера того диска, на якому розташовано файл, до якого буде
виконуватися запис.