C++Builder - копирование файлов |
Здравствуйте, гость ( Вход | Регистрация )
C++Builder - копирование файлов |
17.05.2008 - 13:01
Вставить ник | Быстрая цитата | Сообщение
#1
|
|
Постоялец форума Группа: Участник Сообщений: 978 Регистрация: 15.04.2004 Пользователь №: 3224 |
Есть такая задача: скопировать файл, находящийся в одной директории, и создать его копию в другой.
Файл может быть текстовым, а может двоичным. Как это можно сделать в C++Builder ? |
|
|
17.05.2008 - 19:10
Вставить ник | Быстрая цитата | Сообщение
#2
|
|
Частый гость Группа: Участник Сообщений: 182 Регистрация: 5.01.2006 Пользователь №: 11345 |
И для чего господь дал человеку гугль?
Код //Will FileTo.txt be overwritten if it already exists? No.
const bool failIfExists = true; CopyFile( "FileFrom.txt","FileTo.txt", failIfExists); Сообщение отредактировано Graker - 17.05.2008 - 19:11 |
|
|
17.05.2008 - 19:50
Вставить ник | Быстрая цитата | Сообщение
#3
|
|
Постоялец форума Группа: Участник Сообщений: 978 Регистрация: 15.04.2004 Пользователь №: 3224 |
FileFrom.txt - как я понимаю, путь к исходному файлу
FileTo.txt - как я понимаю, путь к новому файлу failIfExists - а это что? |
|
|
17.05.2008 - 19:52
Вставить ник | Быстрая цитата | Сообщение
#4
|
|
Частый гость Группа: Участник Сообщений: 182 Регистрация: 5.01.2006 Пользователь №: 11345 |
|
|
|
17.05.2008 - 19:58
Вставить ник | Быстрая цитата | Сообщение
#5
|
|
Постоялец форума Группа: Участник Сообщений: 978 Регистрация: 15.04.2004 Пользователь №: 3224 |
У меня почему-то эта функция не работает. Что не так? Вот фрагмент кода:
CreateDir ("C:\\localhost\\htdocs\\chet"); CopyFile ("C:\\localhost\\htdocs\\chet\\chet.txt", "C:\\Documents and Settings\\All Users\\Рабочий стол\\IKS\\htdocs\\chet\\chet.txt", true); |
|
|
17.05.2008 - 20:00
Вставить ник | Быстрая цитата | Сообщение
#6
|
|
Частый гость Группа: Участник Сообщений: 182 Регистрация: 5.01.2006 Пользователь №: 11345 |
У меня почему-то эта функция не работает. Что не так? Вот фрагмент кода: CreateDir ("C:\\localhost\\htdocs\\chet"); CopyFile ("C:\\localhost\\htdocs\\chet\\chet.txt", "C:\\Documents and Settings\\All Users\\Рабочий стол\\IKS\\htdocs\\chet\\chet.txt", true); Как я понимаю, ты сначала создаешь директорию c:\\localhost\\htdocs\\chet, а потом хочешь в нее скопировать файл. Это правильно? Если так, то ты перепутал FileFrom и FileTo. Первый аргумент - источник, второй аргумент - приемник. Если я понял неправильно, то тогда код странный: ты создаешь новую директорию, а потом хочешь из нее скопировать куда-то файл. А там еще не может быть файлов Сообщение отредактировано Graker - 17.05.2008 - 20:02 |
|
|
17.05.2008 - 20:48
Вставить ник | Быстрая цитата | Сообщение
#7
|
|
Постоялец форума Группа: Участник Сообщений: 978 Регистрация: 15.04.2004 Пользователь №: 3224 |
Виноват, действительно поменял местами.
Graker - спасибо! Еще вопрос: нужно, чтобы при нажатии кноки на форме запускался файл с расширением .exe или .msi. Как это можно сделать? |
|
|
18.05.2008 - 09:26
Вставить ник | Быстрая цитата | Сообщение
#8
|
|
Постоялец форума Группа: Участник Сообщений: 978 Регистрация: 15.04.2004 Пользователь №: 3224 |
Необходимо, чтобы родительское приложение при этом не закрывалось.
|
|
|
18.05.2008 - 13:12
Вставить ник | Быстрая цитата | Сообщение
#9
|
|
void* Группа: Участник Сообщений: 1631 Регистрация: 29.09.2003 Пользователь №: 45 |
::CreateProcess, ничего нового.
В целом же, очень рекомендую разжиться последним MSDN-ом (или хотя бы его онлайновым вариантом msdn.microsoft.com) для более подробного разруливания, что куда и почему. PS. была еще такая функция - WinExec, очень сильно deprecated, зато параметров мало и они понятные. Может еще работает, хотя это крайний случай, если не удастся победить CreateProcess. |
|
|
20.05.2008 - 14:15
Вставить ник | Быстрая цитата | Сообщение
#10
|
|
Постоялец форума Группа: Участник Сообщений: 978 Регистрация: 15.04.2004 Пользователь №: 3224 |
Столкнулся с такой проблемой. Есть код:
AnsiString directo = DirectoryListBox1 -> Items -> Strings[i]; AnsiString fil = FileListBox1 -> Items -> Strings[t]; CopyFile ("C:\\Documents and Settings\\All Users\\Рабочий стол\\IKS\\htdocs\\" + directo + "\\" + fil, "C:\\localhost\\htdocs\\" + directo + "\\" + fil, false); При попытке компиляции программа сообщает, что переменные directo и fil должны иметь тип char. Что сделать, чтобы привести их к нужному виду? |
|
|
20.05.2008 - 14:39
Вставить ник | Быстрая цитата | Сообщение
#11
|
|
Частый гость Группа: Участник Сообщений: 182 Регистрация: 5.01.2006 Пользователь №: 11345 |
Столкнулся с такой проблемой. Есть код: AnsiString directo = DirectoryListBox1 -> Items -> Strings[i]; AnsiString fil = FileListBox1 -> Items -> Strings[t]; CopyFile ("C:\\Documents and Settings\\All Users\\Рабочий стол\\IKS\\htdocs\\" + directo + "\\" + fil, "C:\\localhost\\htdocs\\" + directo + "\\" + fil, false); При попытке компиляции программа сообщает, что переменные directo и fil должны иметь тип char. Что сделать, чтобы привести их к нужному виду? 1. Наверное, он сказал не "char", а "char *", правильно? Для получения указателя на null-terminated-строку нужно вызвать метод char * AnsiString::c_str(). 2. Проще всего сделать вот так: Код AnsiString directo = DirectoryListBox1 -> Items -> Strings[i]; AnsiString fil = FileListBox1 -> Items -> Strings[t]; AnsiString asSource = "C:\\Documents and Settings\\All Users\\Рабочий стол\\IKS\\htdocs\\" + directo + "\\" + fil; AnsiString asDest = "C:\\localhost\\htdocs\\" + directo + "\\" + fil; CopyFile (asSource.c_str(),asDest.c_str(), false); P.S. Автор, без обид, но у тебя хелп к билдеру как, не установлен, или не читабелен? Сообщение отредактировано Graker - 20.05.2008 - 14:40 |
|
|
20.05.2008 - 17:01
Вставить ник | Быстрая цитата | Сообщение
#12
|
|
Постоялец форума Группа: Участник Сообщений: 978 Регистрация: 15.04.2004 Пользователь №: 3224 |
Я в английском катастрофически слаб, а в книгах, что у меня есть, информация очень урезанная - многие встроенные функции и свойства компонентов вообще не упоминаются.
|
|
|
20.05.2008 - 17:22
Вставить ник | Быстрая цитата | Сообщение
#13
|
|
Частый гость Группа: Участник Сообщений: 182 Регистрация: 5.01.2006 Пользователь №: 11345 |
Я в английском катастрофически слаб Эээ, в таком разрезе осваивать программирование на чем-либо в три раза сложнее Однако могу посоветовать поискать в Яндексе. В Рунете есть некоторое количество сайтов, описывающих все (ну, или почти все) классы vcl-библиотеки, используемой в IDE борланда, на родном языке. Сайты по Delphi тоже подойдут: библиотека та же, классы почти не различаются. *посыпая голову пеплом* У меня раньше была огромная куча faq-ов, man-ов, статей и советов по delphi и c++ builder, многое на русском. Стер за ненадобностью в припадке наведения чистоты. Впрочем, я их из инета тащил, так что и ты найдешь, если что Кстати, то, что многие свойства/методы не упоминаются - это, возможно, ввиду их наследования от базовых классов, т.е. нужно читать описание классов-родителей. Сообщение отредактировано Graker - 20.05.2008 - 17:24 |
|
|
20.05.2008 - 17:28
Вставить ник | Быстрая цитата | Сообщение
#14
|
|
Постоялец форума Группа: Участник Сообщений: 978 Регистрация: 15.04.2004 Пользователь №: 3224 |
Теперь компиляция проходит нормально, но копирования файлов почему-то не происходит.
|
|
|
20.05.2008 - 17:30
Вставить ник | Быстрая цитата | Сообщение
#15
|
|
Частый гость Группа: Участник Сообщений: 182 Регистрация: 5.01.2006 Пользователь №: 11345 |
Ставь breakpoint, исполняйся до него, жми alt+ctrl+L, смотри содержимое переменных с путями
|
|
|
20.05.2008 - 17:39
Вставить ник | Быстрая цитата | Сообщение
#16
|
|
Постоялец форума Группа: Участник Сообщений: 978 Регистрация: 15.04.2004 Пользователь №: 3224 |
Для меня это надо расшифровать.
Например, что такое breakpoint и где его искать. |
|
|
20.05.2008 - 18:44
Вставить ник | Быстрая цитата | Сообщение
#17
|
|
Частый гость Группа: Участник Сообщений: 182 Регистрация: 5.01.2006 Пользователь №: 11345 |
Для меня это надо расшифровать. Например, что такое breakpoint и где его искать. Breakpoint - это точка останова, ключевой момент отладки приложений. Ставишь ее на какой-нибудь исполняемой строке программы, и при исполнении (в режиме отладки, конечно) программа остановится на этой строке, чтобы ты мог просмотреть значения своих переменных и т.п. Чтобы ее поставить в c++ builder, нужно нажать F5 на той строке, на которой ты хочешь остановиться. Точка останова незамедлительно появится слева от строки (красный кружок). Также можно ее ставить/снимать, щелкая левой кнопкой мыши в той области, где она появляется. По alt+clrt+L откроется окно Locals, показывающее тебе значения переменных в контексте исполняемой в данный момент функции (т.е. значения локальных переменных). По alt+ctrl+W откроется окно Watches, где ты сможешь сам указать, какие переменные отслеживать (в глобальном и локальном контексте). P.S. Ты раньше только серверными скриптами и т.п. занимался? Если так, то стоит прочитать целиком книжку по c++ или по используемой IDE (а лучше обе). Многие вопросы сами собой отпадут. |
|
|
20.05.2008 - 20:01
Вставить ник | Быстрая цитата | Сообщение
#18
|
|
Постоялец форума Группа: Участник Сообщений: 978 Регистрация: 15.04.2004 Пользователь №: 3224 |
И читал книжки по С++, и делал приложения на C++Builder.
С предыдущей проблемой разобрался. Теперь другая беда: AnsiString direc = DirectoryListBox1 -> Items -> Strings[i]; DirectoryListBox3 -> Directory = "C:\\Documents and Settings\\All Users\\Рабочий стол\\IKS\\htdocs\\" + direc; Программа с этим фрагментом кода компилируется, но при выполнении выдает ошибку I/O error 123. Причем, вся проблема именно в этом +direc. Удаляю этот фрагмент кода - все работает без ошибок. Сообщение отредактировано avtor - 20.05.2008 - 20:30 |
|
|
20.05.2008 - 21:20
Вставить ник | Быстрая цитата | Сообщение
#19
|
|
Частый гость Группа: Участник Сообщений: 182 Регистрация: 5.01.2006 Пользователь №: 11345 |
Как понять, что такое "DirectoryListBox3 -> Directory"? Это какого класса объект? В TListBox нет свойства Directory, судя по хелпу vcl. Что мы должны понять из приведенного отрывка?
И читал книжки по С++, и делал приложения на C++Builder. Гм. Тогда, извини, непонятно, откуда возникают все эти вопросы. upd: аа, сообразил, что за класс. Непонятно, что записано в строке direc. Как ни крути - от отладки тебе не уйти Сообщение отредактировано Graker - 20.05.2008 - 22:27 |
|
|
20.05.2008 - 22:28
Вставить ник | Быстрая цитата | Сообщение
#20
|
|
Постоялец форума Группа: Участник Сообщений: 978 Регистрация: 15.04.2004 Пользователь №: 3224 |
Как понять, что такое "DirectoryListBox3 -> Directory"? Это какого класса объект? В TListBox нет свойства Directory, судя по хелпу vcl. Что мы должны понять из приведенного отрывка? Гм. Тогда, извини, непонятно, откуда возникают все эти вопросы. Код правильный, DirectoryListBox - компонент вкладки Windows3.1, Directory - его свойство, в котором программно устанавливается текущая папка. Ошибку нашел - она в том, что я забывал удалять из списка вышестоящие папки. |
|
|
Текстовая версия | Сейчас: 26.04.2024 - 16:39 |