Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Скопировать файл


Автор: Alca 27.7.2009, 11:44
Как можно скопировать файл  не используя  std::ifstream и ::CopyFile?
Есть ли еще какие-то способы?
Есть вариант использовать fread, fwrite.

Автор: Vaulter 27.7.2009, 12:06
Код

#ifndef _MSC_VER
::system( "cp -f oldfile newfile" );
#endif

Автор: Alek86 27.7.2009, 12:06
system("copy ...");

а еще перетаскивание мышкой в эксплорере

Автор: Alca 27.7.2009, 12:11
Цитата

system("copy ...");

Еще есть варианты? В fcntl.h ничегго нет. 

Автор: andrew_121 27.7.2009, 12:12
Цитата(Alca @  27.7.2009,  11:44 Найти цитируемый пост)
Есть вариант использовать fread, fwrite.

Так а в чем проблема?
Код

const int buff_size = 1024*128;
bool copy_file(const char* dst, const char* src) {
   char* buff = new char[buff_size];
   if ( !buff ) {
      return false;
   }

   FILE* in = fopen(src, "rb");
   if ( !in ) {
      delete[] buff;
      return false;
   }

   FILE* out = fopen(dst, "wb");
   if ( !out ) {
      fclose(in);
      delete[] buff;
      return false;
   }

   int isread = 0;
   while ( (isread = fread(buff, 1, buff_size, in)) > 0 ) {
      fwrite(buff, 1, isread, out);
   }

   fclose(in);
   fclose(out);

   return true;
}

...ошибочка была

Автор: Alca 27.7.2009, 12:16
Цитата

Есть вариант использовать fread, fwrite.

Я так и хотел сделать, думал, что может есть какая-то стандартная функция.

Автор: Alek86 27.7.2009, 12:18
Alca, ты б сказал сначала, из-за чего проблема - копируешь файлы в натив моде винды?
тогда легче самому скопировать, используя торчащие из ntdll.dll функции NtReadFile и ей подобные

Автор: andrew_121 27.7.2009, 12:19
Цитата(Alca @  27.7.2009,  12:16 Найти цитируемый пост)
Я так и хотел сделать, думал, что может есть какая-то стандартная функция. 

нет такой

Автор: Alca 27.7.2009, 12:27
Цитата

Alca, ты б сказал сначала, из-за чего проблема - копируешь файлы в натив моде винды?

Ну типа нужна кроссплатформенная реализация .  smile 

Автор: Alek86 27.7.2009, 12:33
чем же std::ifstream не подходит?

Автор: Alca 27.7.2009, 12:46
Цитата

чем же std::ifstream не подходит?

Там глюки с путями. Если путь к файлу содержит русские символы, то ifstream не может найти этот файл.

Добавлено @ 12:49
http://forum.vingrad.ru/topic-229019.html
http://ddima.livejournal.com/60832.html

Добавлено @ 12:57
Цитата

Если путь к файлу содержит русские символы, то ifstream не может найти этот файл.

Не хо юникод прикручивать.

Автор: Alca 27.7.2009, 13:45
http://www.opensource.apple.com/source/copyfile/copyfile-42/copyfile.c   smile

Добавлено через 43 секунды
http://www.java2s.com/Code/C/File/Copyafile.htm

Добавлено через 56 секунд
http://www.daniweb.com/forums/thread97080.html#

Автор: W4FhLF 27.7.2009, 15:13
Цитата(Alca @  27.7.2009,  12:46 Найти цитируемый пост)
Если путь к файлу содержит русские символы, то ifstream не может найти этот файл.


Глоальную локаль установи.

Автор: Alca 27.7.2009, 15:18
Цитата

Глоальную локаль установи.

Это я в курсе. Как-то кривовато получается. А если укр, язык?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)