ze]; bytesRead; (hFile, fileBuffer, fileSize, amp; bytesRead, 0);
Перший параметр передається в функцію CreateFile () - це строкова змінна містить шлях до відкривається xml-файлу. Прапор GENERIC_READ означає, що файл відкривається тільки для читання. Прапор OPEN_EXISTING сведетельствует від тому буде відкритий існуючий файл. Розлядаючих метод повертає ідентифікатор відкритого ресурсу (файлу). Функція GetFileSize () повертає розмір відкритого файлу. За допомогою функції ReadFile () дані всього файлу зчитуються в оперативну пам'ять (за адресою міститься в fileBuffer). Третій параметр розглянутого методу - кількість байт для читання. Після виконання функції, змінна bytesRead буде містити число реально прочитаних байт.
Для програмної перевірки, чи не потрапить розділ на другий рядок сторінки специфікації (етап 2, розглянутого алгоритму) був розроблений наступний фрагмент коду.
(DWORD k=0; k lt; kline_before + 1; k ++)
{(((* line) + k == 2) || ((* line) + k == (K + 2)) || ((((* line) + k -(K + 2))% T == 0) amp; amp; (((* line) + k) gt; (K + 2))))
{[section] [2]=k;=true ;;
}
}
Тут змінна kline_before містить значення колічесіва порожніх lt; line/ gt; додаються зверху lt; section/ gt ;. За адресою хранящімуся в line, знаходиться значення лічильника рядків. Мінлива K - це кількість рядків на першій сторінці специфікації. Т - кількість рядків на 2й і наступних сторінках специфікації. Мінлива section містить кількість переглянутих розділів. І відповідно, номер поточного розділу. Мінлива масиву positionSectionStart [section] [2] містить кількість рядків доданих перед поточним розділом. Мінлива масиву positionSectionStart [section] [0] містить позицію символу lt; (поточного тега lt; section/ gt; або lt; line/ gt;) в xml-файлі. Значення елемента масиву positionSectionStart [section] [1] інформує про те, що positionSectionStart [section] [0] містить позицію об'єкта lt; section gt; або lt; line/ gt;.
Для програмної перевірки розриву між розділом і першою не порожній рядком, після нього, у вигляді перенесення останньої на інший аркуш специфікації (етап 3, розглянутого алгоритму), був розроблений наступний фрагмент коду.
(DWORD k=0; k lt; kline_after + 2; k ++)
{
//Перевіряємо чи не потрапила секція в кінець листа специфікації ((((* line) + k) == K) || (((((* line) + kK)% T)==0) amp; amp; (((* line) + k) gt; K)))
{
(* section10_29) ++; _ 29 [* section10_29] [0]=section;
//Повинні бути додані як мінімум 2 строкі_29 [* section10_29] [1]=k + 2;
* line +=k + 2 ;;
}
}
Тут змінна kline_after здобуде значення колічесіва порожніх lt; line/ gt; додаються знизу lt; section/ gt ;. За адресою хранящімуся в section10_29 знаходиться значення лічильника розділів потрапили в початок або кінець листа специфікації. Елемент масиву positionSection10_29 [* section10_29] [0] містить порядковий номер розділу в xml-документі. Мінлива positionSection10_29 [* section10_29] [2] містить число додатково додаються рядків перед розділом, для перенесення його на новий аркуш специфікації.
Програмна реалізація перевірки попадання розділу в кінець листа специфікації представлена ??нижче.
((* line == 1) || (* line == (K + 1)) || (((* line - (K + 1))% T == 0) amp ; amp; ((* line gt; (K + 1))))
{
(* section10_29) ++; _ 29 [* section10_29] [0]=section; _29 [* section10_29] [1]=1;
* line ++ ;;
}
Перевірка на етапах 5 і 6 реалізується аналогічно.
Код функцій, що реалізують алгоритм перетворення xml-файлу в новий xml-документ, представлений у додатку B.
4.2 Створення інсталяційного пакета
Для створення пакету інсталяції розробленого додатка і всіх супутніх компонентів скористаємося безкоштовно поширюваної програмою NetScat Extreme Installer raquo ;, версії 1.04. Для цього, після її запуску на вкладці Загальні введемо дані, як показано на малюнку 4.13.
Малюнок 4.13 - Використання програми NetScat Extreme Installer
На вкладці Файли вкажемо директорію, в якій знаходяться файли, призначені для компонування створюваного інсталятора. Вкладка Ярлики призначена для введення даних про ярликах, які необхідно створити інсталятору при установці програми. В...