Копирование файла c builder
Borland и C++Builder 6.0 как совершенная интерактивная среда программирования на языке C++. Проектирование программы, глобальные переменные. Форма создания нового каталога. Объекты на Form Dialog Delete. Блок-схема взаимодействия компонентов программы.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 27.08.2014 |
Размер файла | 836,2 K |
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Файловые менеджеры - это программы упрощающие и ускоряющие работу с файлами. Они позволяют как создавать, так и удалять файлы, редактировать, копировать, перемещать и многое другое.
Ни одна операционная система на сегодняшний день не может обойтись без удобного и надежного файлового менеджера. Огромное количество нарастающих с каждым днем данных нуждается в грамотной структуризации и разделении. Не зря все современные операционные системы, как правило, включают в свой состав, в первую очередь, именно файловый менеджер, как неотъемлемую часть самой ОС и необходимый компонент для реализации всех возможностей по доступу к файловой системе. При этом такой доступ должен удовлетворять многим, зачастую противоположным условиям, к которым относятся: возможность быстрого поиска и отображения нужной информации, полнота операций над этими данными, гарантированное исключение ошибок при этих операциях, простота и т.д.
Проект состоит, помимо файлов, создаваемых системой программирования автоматически, из четырех модулей (Unit1.c, Unit2.c, Unit3.c и Unit4.c).
Раздел «Анализ задания и постановка задач» описывает процесс постановки задачи. Здесь определяются входные и выходные данные для программы.
Раздел «Теоретическая часть» приводит описание программных средств используемых при разработке. Приводится обоснование выбранных программных продуктов.
Раздел «Проектирование программы». Данный раздел предоставляет непосредственно информацию о компонентах, которые участвовали при создании программы, описывается их назначение в каждом участке программы.
Раздел «Реализация программы». Данный раздел предоставляет детальное описание работы программы, её функций.
Раздел «Тестирование программы» предоставляет информацию об объекте тестирования, необходимых инструментах тестирования, способе его проведения и результатах, полученных в результате его проведения.
В разделе «Заключение» подводится итог выполнения курсовой работы. Описываются полученные результаты.
В разделе «Литература» приводится список литературы, использованной в ходе выполнения курсовой работы.
В приложении «А» приводится функциональная схема программы.
Приложение «Б» содержит листинг программы.
1. Анализ задания и постановка задач
В ходе реализации проекта необходимо реализовать программу, которая способна производить основные действия над файлами и каталогами: копирование удаление, перемещение, создание новой директории.
Программа должна осуществлять:
просмотр файлов и каталогов;
копирование файлов и каталогов;
удаление файлов и каталогов;
перемещение файлов и каталогов;
создание новой директории.
2. Теоретическая часть
Курсовой проект выполнен в системе визуального программирования Borland C++Builder 6.0, с использованием библиотеки визуальных компонентов (VCL) и функций Windows API.
Borland C++Builder 6.0 представляет собой совершенную интерактивную среду программирования на языке C++. Система обеспечивает высокую продуктивность и производительность, удовлетворяя современным требованиям к разработке приложений под Windows.
Файловые менеджеры - это программы-оболочки для работы с операционной системой. С помощью файлового менеджера пользователи могут просматривать, копировать, удалять и создавать каталоги и файлы, запускать программы и т.д. Одним из первых файловых менеджеров является Norton Commander для работы с ОС DOS, созданный Питером Нортоном. В нем впервые использован двухпанельный интерфейс. В файловом менеджере экран делится на две самостоятельные области или панели, в каждой из которых отображается содержимое каталогов и файлов на дисках. Файловый менеджер Norton Commander является основоположником класса программ - классических файловых менеджеров. К классическим файловым менеджерам относятся: DOS Navigator, FAR Manager, Volkov Commander, Windows Commander и т.д.
Классические файловые менеджеры унаследовали комбинации клавиш Norton Commander. В настоящее время опытные пользователи ПК для работы с ОС Windows предпочитают использовать файловые менеджеры FAR или Total Commander. Многие пользователи предпочитают использовать FAR Manager по причине наличия огромного количества дополнительных модулей или плагинов, которые позволяют расширить функциональность файлового менеджера.
3. Проектирование программы
Программа содержит 3 формы: Form1 - главная форма программы, FormDialogCreateDir - форма для создания нового каталога, FormDialogDelete - форма для удаления каталога.
Все глобальные константы объявлены в программе с помощью директивы define. LEFT=1 и RIGHT=0 - используется для обозначения панели, над которой производятся действия.
FO_DELETER=5 используется в Delete для выбора действия «помещение в корзину.
Используются глобальные переменные:
DirSel (тип int) изменяет значение, когда в LitsDevicesLeft (ListDevicesRight) происходит выбор устройства либо происходит нажатие на bCurrentRootDirLeft (bCurrentRootDirRight). Используется для передачи в HendlerOfOpen.
RootDirLeft и RootDirRight (тип AnsiString) - текущий путь корневой директории. Используется для передачи в HendlerOfOpen.
CurrentPathLeft,CurrentPathRight (тип AnsiString) - текущий путь. Возвращается HendlerOfOpen. Используется для передачи в Delete, CreateFolder,CopyOrRemove.
Panel (тип int) - принимает только два значения: LEFT и RIGHT. Используется для указания активной панели.
В главном модуле (Unit1), находится описание главной формы программы, создаваемой при ее запуске, в теле этого модуля находятся исходные тексты обработчиков событий, порождаемых теми или иными действиями пользователя в главной форме программы (Form1).
Во втором модуле (Unit2) описаны все функции, на вызове которых строится работа программы, кроме функций-обработчиков событий. В хедере этого модуля объявлены глобальные константы и переменные, а так же находятся прототипы функций, вызываемых из других модулей.
В третьем модуле (Unit3) находится описание и функции-обработчики событий для формы (FormDialogCreateDir), являющейся диалоговым окном создания новой директории.
В четвертом модуле (Unit4) находится описание и функции-обработчики событий для формы (FormDialogDelete), являющейся диалоговым окном удаления или помещения в корзину.
4. Реализация программы
При запуске программы создается главная форма Form1 - представитель класса TForm в соответствии с рисунком 4.1. При создании формы создаются списки доступных устройств, отображаемые в FileListLeft и FileListRigh, в обеих панелях отображается корневая директория диска C:\, поскольку нами было сделано предположение, что этот логический диск должен быть практически на всех компьютерах, так же создается множество атрибутов директории DirAttribSet, используемое функциями второго модуля.
В Form1 реализовано одно событие: Create (создание, функция-обработчик: FormCreate). Далее опишем объекты, расположенные на Form1.
FileListLeft и FileListRight - представителями класса TStringGrid (строковая таблица). Выполняют функцию панелей, куда происходит отображение содержимого директорий и где пользователь выбирает файл (каталог), над которым он собирается выполнять какое-либо действие. Здесь большое значение имеет понятие «активная панель». Роль активной панели играет та таблица, к которой в данный момент обращается пользователь. Все операции совершаются с файлами (каталогами), отображенными в активной панели (копирование и перемещение осуществляется в папку, содержимое который в данный момент отображено в неактивной панели). В программе предусмотрен разный вид для активной и неактивной панелей. В FileListLeft и FileListRigh реализованы следующие события: DblClick (двойной клик мыши, функции-обработчики: FileListLeftDblClick и FileListRightDblClick), Enter (вход, что означает, что панель становится активной, функции-обработчики: FileListLeftEnter и FileListRightEnter), KeyDown («горячие клавиши», функции-обработчики: FileListLeftKeyDown и FileListRightKeyDown).
ListDevicesLeft и ListDevicesRight - представители класса TComboBox (выпадающий список выбора). Являются списками доступных устройств хранения информации. Выбор пользователем какого-либо устройства из этого списка означает переход к корневой директории этого устройства, которая отображается в соответствующей панели, становящейся при этом активной. В случае, если корневые директории в обеих панелях после выбора совпадают, то в активной панели отображается содержимое той же папки, что и в неактивной. В ListDevicesLeft и ListDevicesRight реализованы следующие события: - Select (выбор пункта в списке, функции-обработчики: ListDevicesLeftSelect и ListDevicesRightSelect), Enter (вход, что означает, что соответствующая панель становится активной, функции-обработчики: FileListLeftEnter и FileListRightEnter).
bRemove, bCopy, bCreateDir, bDelete, bCurrentRootDirLeft и bCurrentRootDirRight - представители класса TButton (кнопка). Кнопки выполняют различные функции. Во всех кнопках реализовано только одно событие - Click (нажатие, функции обработчики: bCreateDirClick, bDeleteClick, bCopyClick, bRemoveClick, bCurrentRootDirLeftClick и bCurrentRootDirRightClick). При нажатии на bRemove происходит перемещение файла (каталога, со всеми вложенными каталогами) из папки, отображенной в активной панели, в папку, отображенную в неактивной. Нажатие bCopy практически аналогично нажатию на bRemove. только происходит копирование, а не перемещение. Нажатие на bCreateDir выводит диалог создания каталога FormDialogCreateDir. Нажатие на bDelete выводит диалог удаления или помещения в корзину FormDialogDelete. При нажатии на bCurrentRootDirLeft или bCurrentRootDirRight в соответствующих панелях происходит отображение корневой директории текущего устройства хранения информации.
LabelCurrentPathLeft и LabelCurrentPathRight - представители класса TLabel (надпись). В этих объектах отображаются текущие пути панелей.
Рисунок 4.1 - Главная форма программы
При нажатии на кнопку формы Form1 bCreateDir на экран выводится форма FormDialogCreateDir - представитель класса TForm в соответствии с рисунком 4.2.
Рисунок 4.2 - Форма создания нового каталога
Опишем объекты, расположенные на FormDialogCreateDir.
edNewDirName - представитель класса TEdit (поле ввода). Поле, куда пользователь вводит имя нового каталога. В edNewDirName реализовано событие KeyDown («горячие клавиши», функция-обработчик edNewDirNameKeyDown).
Label1 - представитель класса TLabel (надпись). Содержит надпись «Имя нового создаваемого каталога».
При нажатии на кнопку формы Form1 bDelete на экран выводится форма FormDialogDelete - представитель класса TForm в соответствии с рисунком 4.3.
Рисунок 4.3 - Форма для удаления каталога
Опишем объекты на FormDialogDelete:
Label1 - представитель класса TLabel (надпись). Содержит надпись «Выберете действие:».
bDelete, bCancel, bRecycler - представители класса TButton (кнопка). В bDelete, bCancel, bRecycler реализовано одно событие: Click (нажатие, функции-обработчики: bDeleteClick, bCancelClick и bRecyclerClick). При нажатии на bDelete файл (каталог), находящийся в фокусе в активной панели, удаляется. При нажатии на bRecycler, файл (каталог), находящийся в фокусе в активной панели, помещается в корзину. При нажатии на bCancel форма скрывается без выполнения каких-либо других действий.
Рассмотрим функции реализации операций:
Создает список корневых директорий доступных устройств хранения информации и отображает этот список в ListDevicesLeft и ListDevicesRight.
Функции не передаются параметры. Не возвращает значения.
Используется функция Windows API GetDriveType.
Функции предается строка, заканчивающаяся нулем (char Path[]), содержащая путь к директории, в которой производится поиск всех содержащихся в ней папок и файлов и переменная (int Panel), в зависимости от значения которой формируется либо DequeFindLeft (если Panel=LEFT) или DequeFindRight (если Panel=RIGHT).
Используются три функции Windows API:FindFirstFile, FindNextFile, FindClose.
Вызывается в ViewDirectory.
DequeFindLeft (DequeFindRight) - это контейнер библиотеки стандартных шаблонов, являющийся очередью deque, элементами которой являются структуры типа WIN32_FIND_DATA. Тип WIN32_FIND_DATA описан в winbase.h. Ссылка на структуру передается в FindFirstFile и FindNextFile.
Преобразует структуру типа WIN32_FIND_DATA в _FileProperty.
Функции передается структура типа WIN32_FIND_DATA и ссылка на структуру типа _FileProperty. Не возвращает значения.
Вызывается в ViewDirectory.
Тип _FileProperty описывается в начале модуля и используется для отображения результатов работы ScanDir в FileListLeft (FileListRight), т.к. некоторые поля WIN32_FIND_DATA не адаптированы для вывода.
4) ViewDirectory. Отображает содержимое папки, путь к которой передается в Path[] в активной панели.
Функции предается строка, заканчивающаяся нулем (char Path[]), содержащая путь, который передается в ScanDir, и переменная (int Panel), передаваемая в ScanDir, и в зависимости от значения которой, результаты отображаются в FileListLeft (если Panel=LEFT) или FileListRight (если Panel=RIGHT). Не возвращает значения.
Вызывается в HandlerOfOpen, CreateFolder, CopyOrRemove и Deleting.
В зависимости от действий пользователя, выполняет различные операции. Если происходит выбор в ListDevicesLeft (ListDevicesRight), то отображается корневая директория, выбранного устройства при условии, что корневые директории панелей не сосвпадают, иначе в активной панели отображается открытая папка неактивной панели. Если происходит нажатие на bCurrentRootDirLeft (bCurrentRootDirRight), то отображается корневая директория текущего устройсва. Если происходит двойной клик (нажатие клавиши Enter) по FileListLeft (FileListRight), то анализируется, какая строка находится сейчас в фокусе, и в зависимости от содержимого, выполняются различные операции. Если в фокусе находится файл, то он открывается приложением, с которым ассоциирован либо, если это приложение, производится его запуск. Если в фокусе находится папка, то отображается ее содержимое. Все действия совершаются с активной панелью.
Функции передается срока, путь к корневой директории устройства (AnsiString RootDir), активная панель (int Panel) и признак смены корневой директории (int DirSel). Возвращает текущий путь активной директории.
Используется функция Windows API ShellExecute.
Создает директорию в активной панели.
Функции передается указание на то, какая сейчас панель активна (int Panel). Возвращает значение типа bool, в зависимости от результатов выполнения операции. Функция создает каталог в пути панели, являющейся активной. В качестве текущего пути в каждой панели используются значения соответствующих глобальных переменных.
Используются функции Windows API: CreateDirectory и MessageBox.
Удаляет или помещает в корзину объект (файл или папку, со всеми ее вложенными папками), находящийся в фокусе в активной панели.
В функцию передается признак активной панели (int Panel) и операция (int Operation), которую надо совершить, т.е. удалить или поместить в корзину. Не возвращает значения.
Используется функция Windows API SHFileOperation.
Перемещает или копирует объект (файл или папку, со всеми ее вложенными папками), находящийся в фокусе в активной панели в папку неактивной панели.
В функцию передается признак активной панели (int Panel) и операция (int Operation), которую надо совершить, т.е. копировать или переместить. Не возвращает значения.
Используется функция Windows API SHFileOperation.
5. Тестирование программы
После запуска программы Project1 на экране появится главное окно программы в соответствии с рисунком 5.1
Рисунок 5.1 - Главное окно программы
Далее программа ожидает дальнейших действий пользователя.
Рисунок 5.2 - Подтверждение замены папки
Рисунок 5.4 - Создание нового каталога
При удаление каталога либо файла пользователю будет выведено диалоговое окно для подтверждения удаления в соответствии с рисунком 5.6.
В ходе выполнения курсового проекта была создана программа «Файловый менеджер». В ней были реализованы следующие функции:
просмотр файлов и каталогов;
копирование файлов и каталогов;
удаление файлов и каталогов;
перемещение файлов и каталогов;
создание новой директории.
Созданный файловый менеджер был выполнен в системе визуального программирования Borland C++Builder 6.0, с использованием библиотеки визуальных компонентов (VCL) и функций Windows API.
В программе было создано 3 формы: главная форма программы, форма для создания нового каталога, форма для удаления каталога.
В данную программу при необходимости можно внести изменения. А именно улучшение дизайна главной формы и добавление новых функций и возможностей.
2. Шмидский Я.К. Программирование на языке С/С++. Самоучитель. -М.: Вильямс, 2004. -352с.
Примеры использования средств C++ для работы с файлами
В теме приводятся примеры использования файловой системы C++ для:
- чтения информации из файлов;
- записи информации в файлы.
Содержание
- 1. Функция, читающая строки из клавиатуры и записывающая их в файл
- 2. Функция, которая читает текстовый файл и выводит его содержимое на экран
- 3. Пример бесформатного ввода/вывода. Копирование одного файла в другой
- 4. Пример бесформатного ввода/вывода. Копирование одного файла в другой. Функция put()
- 5. Пример функции записывающей структурную переменную в файл
- 6. Пример чтения структурной переменной из файла
- 7. Пример чтения/записи массива структур в файл. Функции write() , read()
- 8. Пример записи/чтения массива чисел типа double
- 9. Пример чтения из файла строк. Функция getline()
- 10. Пример чтения строк из файла. Функции getline() + eof()
Поиск на других ресурсах:
1. Функция, читающая строки из клавиатуры и записывающая их в файл
Результат работи программы:
2. Функция, которая читает текстовый файл и выводит его содержимое на экран
Функция Example2() читает содержимое файла filename , имя которого есть входящим параметром функции.
3. Пример бесформатного ввода/вывода. Копирование одного файла в другой
В примере реализована функция Example3() , которая выполняет копирование файлов в двоичном (бинарном) формате. Функция получает два параметра. Первый параметр типа const char* есть имя файла-источника. Второй параметр типа const char* есть имя файла-назначения.
Функция реализует посимвольное копирование. Для получения символа из файла-источника используется функция get() .
Вызов функции Example3() из функции main() может быть следующим:
4. Пример бесформатного ввода/вывода. Копирование одного файла в другой. Функция put()
Функция Example4() из данного примера работает также как и предыдущая, только вместо вывода в поток << используется функция put() . Также, с помощью функции is_open() выполняется проверка на корректность открытия файла.
5. Пример функции записывающей структурную переменную в файл
По данному примеру можно реализовывать собственные функции, которые будут записывать структуры или классы в файл.
Реализована функция Example5() , которая выполняет запись структурной переменной типа BOOK в файл, имя которого есть входящим параметром. Функция Example5() использует функцию write() для записи. Файл открывается в двоичном формате ( ios::binary ).
6. Пример чтения структурной переменной из файла
Данный пример есть продолжением предыдущего примера из пункта 5. В примере в функции Example6() заполняется значение структурной переменной типа BOOK . Полученное значение формируется как входящий параметр-ссылка на тип BOOK . Также функция получает параметром имя файла для чтения. Для чтения структурной переменной используется функция read() .
Результат работы программы
8. Пример записи/чтения массива чисел типа double
- запись в файл массива M чисел типа double функцией write() ;
- чтение из файла массива чисел типу double функцией read() .
Файл открывается в двоичном формате.
Результат работи программы:
9. Пример чтения из файла строк. Функция getline()
10. Пример чтения строк из файла. Функции getline() + eof()
В примере реализована функция Example10() , которая выполняет чтение строк из файла. Файл открывается в текстовом формате. Имя файла задается входящим параметром функции. Определение конца файла выполняется с помощью функции eof() .
У меня почему-то эта функция не работает. Что не так? Вот фрагмент кода:
Если я понял неправильно, то тогда код странный: ты создаешь новую директорию, а потом хочешь из нее скопировать куда-то файл. А там еще не может быть файлов
Еще вопрос: нужно, чтобы при нажатии кноки на форме запускался файл с расширением .exe или .msi.
Как это можно сделать?
Столкнулся с такой проблемой. Есть код:
При попытке компиляции программа сообщает, что переменные directo и fil должны иметь тип char.
Что сделать, чтобы привести их к нужному виду?
Столкнулся с такой проблемой. Есть код:
При попытке компиляции программа сообщает, что переменные directo и fil должны иметь тип char.
Что сделать, чтобы привести их к нужному виду?
1. Наверное, он сказал не "char", а "char *", правильно? Для получения указателя на null-terminated-строку нужно вызвать метод char * AnsiString::c_str().
2. Проще всего сделать вот так:
P.S. Автор, без обид, но у тебя хелп к билдеру как, не установлен, или не читабелен?
Эээ, в таком разрезе осваивать программирование на чем-либо в три раза сложнее
Однако могу посоветовать поискать в Яндексе. В Рунете есть некоторое количество сайтов, описывающих все (ну, или почти все) классы vcl-библиотеки, используемой в IDE борланда, на родном языке. Сайты по Delphi тоже подойдут: библиотека та же, классы почти не различаются.
*посыпая голову пеплом* У меня раньше была огромная куча faq-ов, man-ов, статей и советов по delphi и c++ builder, многое на русском. Стер за ненадобностью в припадке наведения чистоты. Впрочем, я их из инета тащил, так что и ты найдешь, если что
Кстати, то, что многие свойства/методы не упоминаются - это, возможно, ввиду их наследования от базовых классов, т.е. нужно читать описание классов-родителей.
Например, что такое breakpoint и где его искать.
Например, что такое breakpoint и где его искать.
Breakpoint - это точка останова, ключевой момент отладки приложений. Ставишь ее на какой-нибудь исполняемой строке программы, и при исполнении (в режиме отладки, конечно) программа остановится на этой строке, чтобы ты мог просмотреть значения своих переменных и т.п. Чтобы ее поставить в c++ builder, нужно нажать F5 на той строке, на которой ты хочешь остановиться. Точка останова незамедлительно появится слева от строки (красный кружок). Также можно ее ставить/снимать, щелкая левой кнопкой мыши в той области, где она появляется.
По alt+clrt+L откроется окно Locals, показывающее тебе значения переменных в контексте исполняемой в данный момент функции (т.е. значения локальных переменных). По alt+ctrl+W откроется окно Watches, где ты сможешь сам указать, какие переменные отслеживать (в глобальном и локальном контексте).
P.S. Ты раньше только серверными скриптами и т.п. занимался? Если так, то стоит прочитать целиком книжку по c++ или по используемой IDE (а лучше обе). Многие вопросы сами собой отпадут.
И читал книжки по С++, и делал приложения на C++Builder.
С предыдущей проблемой разобрался. Теперь другая беда:
Программа с этим фрагментом кода компилируется, но при выполнении выдает ошибку I/O error 123. Причем, вся проблема именно в этом +direc.
Удаляю этот фрагмент кода - все работает без ошибок.
Как понять, что такое "DirectoryListBox3 -> Directory"? Это какого класса объект? В TListBox нет свойства Directory, судя по хелпу vcl. Что мы должны понять из приведенного отрывка?
И читал книжки по С++, и делал приложения на C++Builder.Гм. Тогда, извини, непонятно, откуда возникают все эти вопросы.
upd: аа, сообразил, что за класс. Непонятно, что записано в строке direc. Как ни крути - от отладки тебе не уйти
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Копирует существующий файл в новый файл.
Перегрузки
Копирует существующий файл в новый файл. Перезапись файла с тем же именем не разрешена.
Копирует существующий файл в новый файл. Перезапись файла с тем же именем разрешена.
Copy(String, String)
Копирует существующий файл в новый файл. Перезапись файла с тем же именем не разрешена.
Параметры
Имя целевого файла. Это не может быть имя каталога или имя существующего файла.
Исключения
У вызывающего объекта отсутствует необходимое разрешение.
-или- Параметр sourceFileName или destFileName определяет каталог.
Параметр sourceFileName или destFileName имеет значение null .
Указанный путь, имя файла или оба значения превышают максимальную длину, заданную в системе.
В sourceFileName или destFileName указан недопустимый путь (например, ведущий на несопоставленный диск).
Не удалось найти sourceFileName .
-или- Произошла ошибка ввода-вывода.
Параметр sourceFileName или destFileName имеет недопустимый формат.
Примеры
В следующем примере файлы копируются в папку резервного копирования C:\archives\2008. В нем используются две перегрузки Copy метода следующим образом:
Сначала используется File.Copy(String, String) перегрузка метода для копирования текстовых файлов (.txt). В коде показано, что эта перегрузка не допускает перезаписи уже скопированных файлов.
Затем она использует File.Copy(String, String, Boolean) перегрузку метода для копирования изображений (.jpg файлов). В коде показано, что эта перегрузка разрешает перезапись уже скопированных файлов.
Комментарии
Этот метод эквивалентен Copy(String, String, Boolean) перегрузке метода с overwrite параметром, для которого задано значение false .
Читайте также: