Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> копирование файлов в Си, копирование файлов в Си 
:(
    Опции темы
Гость_opex
Дата 25.3.2004, 00:05 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











как копировать файл с любым разрешением (на Си )
текстовые файл копируются но в конце появляется символ "я"
а допустим ехе не в какую
Код
#include <stdio.h>
void main()
{ char n,name1[20],name2[20];
FILE *file1,*file2;
clrscr();
printf("\nname copy file ");
scanf("%s",&name1);
printf("\nname copy to ");
scanf("%s",&name2);
file1 = fopen(name1,"r");
file2 = fopen(name2,"w");
 for(;!feof(file1);)
 {
  fscanf(file1,"%1c",&n);
  fprintf(file2,"%c",n);
 }
fclose(file1);
fclose(file2);
}

зарание благодарен
  Вверх
Opex
Дата 25.3.2004, 00:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 2.3.2004
Где: Архангельск Росси я

Репутация: нет
Всего: нет



может еть какаянибуть библиотечная функция
PM WWW ICQ   Вверх
sergejzr
Дата 25.3.2004, 02:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 19
Всего: 360



Цитата
for(;!feof(file1);)
{
  fscanf(file1,"%1c",&n);
  }


Так не пойдёт. Ты ищешь в файле знак EOF (их в .ехе куча может быть smile.gif ).
Пользуйся read() write(), чтобы копировать "вслепую".

Обязательно посмотри мануалы к этим функциям.

Пример (без опросов на существованиe файлов):
Код

#include <stdio.h>
#include <io.h>

int main(int argc, char *argv[])
{
FILE * in, * out;
int  n;
char buf [512];

in=fopen(argv[1],"rb");
out=fopen(argv[2],"w");

while ((n = read(fileno(in), buf, sizeof buf)) > 0)
 {
   write(fileno(out), buf, n);  
 }

 return 0;
}

PS: Bопросик, кто нить знает, как подцветку кода в сообщениях включать?
Добавлено @ 02:16
read() write() НАМНОГО быстрее.
Величину buf регулируй по вкусу smile.gif

Это сообщение отредактировал(а) sergej.z - 25.3.2004, 02:16


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
NiJazz
Дата 25.3.2004, 08:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Jazz coder
****


Профиль
Группа: Экс. модератор
Сообщений: 2286
Регистрация: 10.8.2003
Где: Москва

Репутация: 1
Всего: 23



Если делаешь под Windows, то лучше используй CopyFile.
PM MAIL   Вверх
Opex
Дата 25.3.2004, 10:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 2.3.2004
Где: Архангельск Росси я

Репутация: нет
Всего: нет



sergej.z большое спасибо но я не понимаю зачем в функции main в списке формальных пораметров сидит int argc или я чтото не догнал.

NiJazz а можно по подробнее про CopyFile.
PM WWW ICQ   Вверх
OlegsDP
Дата 25.3.2004, 12:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 25.2.2004

Репутация: нет
Всего: 1



The CopyFile function copies an existing file to a new file.
BOOL CopyFile(
LPCTSTR lpExistingFileName, // pointer to name of an existing file
LPCTSTR lpNewFileName, // pointer to filename to copy to
BOOL bFailIfExists // flag for operation if file exists
);

Parameters
lpExistingFileName
Points to a null-terminated string that specifies the name of an existing file.
lpNewFileName
Points to a null-terminated string that specifies the name of the new file.
bFailIfExists
Specifies how this operation is to proceed if a file of the same name as that specified by lpNewFileName already exists. If this parameter is TRUE and the new file already exists, the function fails. If this parameter is FALSE and the new file already exists, the function overwrites the existing file and succeeds.

Return Values
If the function succeeds, the return value is nonzero.
If the function fails, the return value is zero. To get extended error information, call GetLastError.
Remarks
Security attributes for the existing file are not copied to the new file.
File attributes (FILE_ATTRIBUTE_*) for the existing file are copied to the new file. For example, if an existing file has the FILE_ATTRIBUTE_READONLY file attribute, a copy created through a call to CopyFile will also have the FILE_ATTRIBUTE_READONLY file attribute. For further information on file attributes, see CreateFile.

PM MAIL   Вверх
NiJazz
Дата 25.3.2004, 13:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Jazz coder
****


Профиль
Группа: Экс. модератор
Сообщений: 2286
Регистрация: 10.8.2003
Где: Москва

Репутация: 1
Всего: 23



Код
BOOL CopyFile(
 LPCTSTR lpExistingFileName,
 LPCTSTR lpNewFileName,
 BOOL bFailIfExists
);


lpExistingFileName - Имя текущего файла, который хочешь копировать. Например, C:\\myDir\\MyFile.txt

lpNewFileName - куда хочешь его скопировать. Например, C:\\NewDir\\MyNewFile.txt. Можно просто C:\\NewDir\\, если не хочешь менять имени.

bFailIfExists - опеределяет, надо ли заменять файл, если такой существует. FALSE - перезаписать.

Не забудь сделать #include <windows.h>
PM MAIL   Вверх
sergejzr
Дата 25.3.2004, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 19
Всего: 360



Цитата

...зачем в функции main в списке формальных пораметров сидит int argc...

Если вызвать программу с аргументами например:

my.exe infile.txt outfile.txt

то argc осведомит в main о количестве переданных аргументов, а argv будет содержать эти аргументы.
Абсолютно верно, что в моём примере argc не используется.
Этот пример был написан на скорую руку(даже fclose() не был вызван). Вообще то надо было бы проверить, сколько аргументов было передано в нашу программу.
Код

int main(int argc, char *argv[])
{
FILE * in, * out;
int  n;
char buf [512];

//нам необходимо 3 аргумента для работы программы my.exe,infile,outfile
if(argc<3)
{//не указан infile outfile
printf("use %s infile outfile\n",argv[0]);
}

//Рассмотрим массив argv
//argv[0] - имя с которым была вызвана наша программа. Ведь юзер мог изменить имя файла
//argv[1] - infile
//argv[2] - outfile

//Так же можем использовать argc для распечатки всех аргументов
for(n=0;n<argc;n++)
{
printf("argv[%i]=%s",n,argv[n]);
}
//Дальше следует код..

}


PS:
CopyFile внутренне работает так же, но с этой функцией у меня две проблемы.
  • 1. работет только на Виндах.
  • 2. до содержения файла не доберёшься
Преимущество этой функции конечно в том, что она по идее работает быстрей, так как Windows сам выберет оптимальный размер buf.

Это сообщение отредактировал(а) sergej.z - 25.3.2004, 18:47


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Guest
Дата 25.3.2004, 19:24 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











всем большое спамибо
  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1178 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.