Форум программистов, компьютерный форум CyberForum.ru

Копирование файлов без win api - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 42, средняя оценка - 4.93
IIIa66uMEM6eP
заставил Бендера
 Аватар для IIIa66uMEM6eP
432 / 288 / 10
Регистрация: 05.12.2010
Сообщений: 1,642
Записей в блоге: 6
26.04.2011, 18:21     Копирование файлов без win api #1
Добрый день.

Что прошу:
Мне нужно выполнить копирование моего (ехе) в определенные директории - папки.
Мне подсказали что можно использовать CopyFile, CreateDirectory, но они для win api. Можно подключить windows.h - но там тоже не все ровно с этими функциями..
подскажите -
как в с++ (стандарт, не студия, не билдер)
создавать директории, копировать файлы (ехе)
без использования win api.
если не трудно то кинь кусок кода для данных команд, какие библиотеки подключать.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.04.2011, 18:21     Копирование файлов без win api
Посмотрите здесь:

WIN API создание окна C++
WIN API, кодировка C++
Построение графика в Win Api C++
C++ WIN API
C++ Потоки win api
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zim32
1 / 1 / 0
Регистрация: 09.01.2011
Сообщений: 37
26.04.2011, 18:31     Копирование файлов без win api #2
А в стандратной библиотеке с++ разве нету для этого средств? Правда они в итоге всеравно скорее всего вызывают win32 ф-ции
IIIa66uMEM6eP
заставил Бендера
 Аватар для IIIa66uMEM6eP
432 / 288 / 10
Регистрация: 05.12.2010
Сообщений: 1,642
Записей в блоге: 6
26.04.2011, 19:02  [ТС]     Копирование файлов без win api #3
Цитата Сообщение от zim32 Посмотреть сообщение
разве нету для этого средств
увы.. не обнаружил
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
26.04.2011, 19:08     Копирование файлов без win api #4
Цитата Сообщение от IIIa66uMEM6eP Посмотреть сообщение
увы.. не обнаружил
Есть функция для создания директорий
man mkdir
Ну а файлы копировать можно собственным нехитрым велосипедом. К примеру, если отсюда всё лишнее повыкидывать - можно сам процесс копирования в отдельную функцию вынести...
zim32
1 / 1 / 0
Регистрация: 09.01.2011
Сообщений: 37
26.04.2011, 19:09     Копирование файлов без win api #5
Ну значит тогда открываете исходный файл. Целевой. И побайтово копируете содержимое
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
26.04.2011, 19:11     Копирование файлов без win api #6
zim32, побайтово - это круто, но как-то долго... Буфер размером пропорциональный блоку на диске (обычно 512 байт) - наш выбор!
IIIa66uMEM6eP
заставил Бендера
 Аватар для IIIa66uMEM6eP
432 / 288 / 10
Регистрация: 05.12.2010
Сообщений: 1,642
Записей в блоге: 6
26.04.2011, 19:14  [ТС]     Копирование файлов без win api #7
Цитата Сообщение от easybudda Посмотреть сообщение
для создания директорий
в с++ она работает??
Цитата Сообщение от easybudda Посмотреть сообщение
если всё лишнее повыкидывать
))) ну как так) я не знаю что там лишнее, можно снести какую нибудь мелочь а потом удивляться почему оно не работает.

Цитата Сообщение от zim32 Посмотреть сообщение
побайтово копируете содержимое
покажите.. с помощью чего побайтово копируем? может программка какая есть.
PS: просьба код на С++
zim32
1 / 1 / 0
Регистрация: 09.01.2011
Сообщений: 37
26.04.2011, 19:17     Копирование файлов без win api #8
Я не с++ программист. Ну есть же ф-ции типа fopen, fputs, fwrite, fread
Это всё Standart C++ library

http://msdn.microsoft.com/ru-ru/libr...(v=VS.90).aspx

Там и примеры есть. О святы примеры MSDN )
IIIa66uMEM6eP
заставил Бендера
 Аватар для IIIa66uMEM6eP
432 / 288 / 10
Регистрация: 05.12.2010
Сообщений: 1,642
Записей в блоге: 6
26.04.2011, 19:25  [ТС]     Копирование файлов без win api #9
Цитата Сообщение от zim32 Посмотреть сообщение
Это всё Standart C++
стандарт... для VS это стандарт.. Для DEV-C++ это не работает
zim32
1 / 1 / 0
Регистрация: 09.01.2011
Сообщений: 37
26.04.2011, 19:28     Копирование файлов без win api #10
Не знаю даже чем вам помочь тогда. А что такое DEV-C++
IIIa66uMEM6eP
заставил Бендера
 Аватар для IIIa66uMEM6eP
432 / 288 / 10
Регистрация: 05.12.2010
Сообщений: 1,642
Записей в блоге: 6
26.04.2011, 19:32  [ТС]     Копирование файлов без win api #11
Цитата Сообщение от zim32 Посмотреть сообщение
DEV-C++
IDE.. работает на стандарте с++..
не то что VS, Borland - у которых свои дополнения и стандарты к языку.
zim32
1 / 1 / 0
Регистрация: 09.01.2011
Сообщений: 37
26.04.2011, 19:34     Копирование файлов без win api #12
Вы хотите сказать что у вас нету ф-ции fopen или fwrite?
Может вы забыли подключить <stdio.h>

Вообще конечно С++ на удивление консервативен. Он мне напоминает мамонта порой
Давно уже не задавался вопросами как скопировать файл.
НА ПХП например copy($src, $desc)
А тут черти что
IIIa66uMEM6eP
заставил Бендера
 Аватар для IIIa66uMEM6eP
432 / 288 / 10
Регистрация: 05.12.2010
Сообщений: 1,642
Записей в блоге: 6
26.04.2011, 19:40  [ТС]     Копирование файлов без win api #13
на гуглил..

Не по теме:

в std с++ не предусмотрены средства для работы с файловой системой.
Если нужно брать boost::filesystem;



копированием блоками памяти
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <fcntl.h>
#include <stdio.h>
 
#define LEN 1024
 
int main(int argc, char *argv[]){
   int fd;
   char *buffer;
   fd = open("file.txt", O_RDWR);   // открываем файл на чение-запись
   if(fd<0)                                    // ошибка открытия
      exit(1);
   buffer = (char*)malloc(LEN);     // выделяем память под буффер
   if(!buffer){
       close(fd);
       exit(1);
   }
   while(read(fd, buffer, LEN) > 0){// считываем в буффер блоки данных размером LEN
       //....
       //тут что-то делаем с буффером =)
       //....
   }
   free(buffer); //освобождаем буффер
   close(fd);     // закрываем файловый дескриптор
   return 0;
}
как через man sendfile увы не допру..

Добавлено через 1 минуту
Цитата Сообщение от zim32 Посмотреть сообщение
Вы хотите сказать что у вас нету ф-ции fopen или fwrite
ох.. там перенаправление потоков.. открыл поток, записал файл и т.д. но как взять экзешник и скопировать в нужную директорию хз..
zim32
1 / 1 / 0
Регистрация: 09.01.2011
Сообщений: 37
26.04.2011, 19:52     Копирование файлов без win api #14
Цитата Сообщение от IIIa66uMEM6eP Посмотреть сообщение
в std с++ не предусмотрены средства для работы с файловой системой.
Извините но это чушь полная

http://www.cplusplus.com/reference/iostream/

Добавлено через 6 минут
Мало того в с++ даже 2 системы ввода вывода. Одна унаследована от С (fopen, fwrite и т.д) друга обїектная обертка над всем єтим в виде iostream
PB
Просто прогер
1276 / 1063 / 11
Регистрация: 13.03.2009
Сообщений: 2,502
26.04.2011, 19:57     Копирование файлов без win api #15
Раз в C++ такие проблемы с копированием файлов, то написал специально для Си-программистов DLL, на бейсике (PureBasic).
Код
Copy_File(SourceFile.s, NewFile.s)
Первый аргумент - путь к копируемому файлу, а второй, путь куда скопировать файл.
Не стоит благодарности, за пару минут сделал.
Вложения
Тип файла: rar Copy_File.rar (1.7 Кб, 60 просмотров)
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
26.04.2011, 20:16     Копирование файлов без win api #16
Цитата Сообщение от PB Посмотреть сообщение
Раз в C++ такие проблемы с копированием файлов
Да нет там никаких проблем,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <iostream>
#include <fstream>
#include <string>
#include <stdexcept>
 
void copy_file(const std::string& src, const std::string& dst, bool rw = true) 
{
   std::ifstream in(src.c_str(), std::ios::binary);
   if ( !in ) 
   {
      throw std::runtime_error("can`t open file: " + src);
   }
   std::ofstream out(dst.c_str(), (std::ios::binary|((rw)?std::ios::trunc:std::ios::binary)));
   if ( !out ) 
   {
      throw std::runtime_error("can`t create file: " + dst);
   }
   out << in.rdbuf();
}
int main()  
{
   try 
   {
      copy_file("E:\\diff.exe", "C:\\test\\diff.exe");
   } catch (const std::exception& e) 
   {
      std::cout << e.what() << std::endl;
   }
   return 0;
}
IIIa66uMEM6eP
заставил Бендера
 Аватар для IIIa66uMEM6eP
432 / 288 / 10
Регистрация: 05.12.2010
Сообщений: 1,642
Записей в блоге: 6
26.04.2011, 22:05  [ТС]     Копирование файлов без win api #17
asics, странно.. мне вы говорили что не знаете..
Цитата Сообщение от zim32 Посмотреть сообщение
Извините но это чушь полная
на форуме нашел)) не мои слова..
PB, прикольно - спасибо
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
26.04.2011, 22:07     Копирование файлов без win api #18
Цитата Сообщение от IIIa66uMEM6eP Посмотреть сообщение
asics, странно.. мне вы говорили что не знаете..
Да я просто потом порылся в своей колекции и нашол этот код, а так как не помню его наизусть, сразу ответить не смог.
IIIa66uMEM6eP
заставил Бендера
 Аватар для IIIa66uMEM6eP
432 / 288 / 10
Регистрация: 05.12.2010
Сообщений: 1,642
Записей в блоге: 6
26.04.2011, 22:17  [ТС]     Копирование файлов без win api #19
Цитата Сообщение от asics Посмотреть сообщение
в своей колекции
а если у меня много путей, куда копировать ехе, то как форматнется функция?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.04.2011, 22:22     Копирование файлов без win api
Еще ссылки по теме:

Преимущество Win Api C++
win api точки входа C++
C++ DrawText win api - Мистика =)

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
26.04.2011, 22:22     Копирование файлов без win api #20
IIIa66uMEM6eP,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <stdexcept>
 
void copy_file(const std::string& src, const std::string& dst, bool rw = true)
{
   std::ifstream in(src.c_str(), std::ios::binary);
   if ( !in )
   {
      throw std::runtime_error("can`t open file: " + src);
   }
   std::ofstream out(dst.c_str(), (std::ios::binary|((rw)?std::ios::trunc:std::ios::binary)));
   if ( !out )
   {
      throw std::runtime_error("can`t create file: " + dst);
   }
   out << in.rdbuf();
}
int main()
{
   const std::string &file_name("diff.exe");
   std::vector<std::string> vec = {"path_1, path_2, path_3"};
   for(size_t i = 0; i < vec.size(); ++i)
   {
     vec[i] += file_name;
     try
     {
        copy_file("E:\\diff.exe", vec[i]);
     } catch (const std::exception& e)
     {
        std::cout << e.what() << std::endl;
     }
   }
   return 0;
}
Вектор заполните иным способом, так как я зделал это в стиле С++0x, что проканает только на GCC4.5+
Yandex
Объявления
26.04.2011, 22:22     Копирование файлов без win api
Ответ Создать тему
Опции темы

Текущее время: 15:20. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru