Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
Restomix
1 / 1 / 0
Регистрация: 07.05.2015
Сообщений: 79
1

Написать программу, которая создает свою копию

07.05.2015, 21:07. Просмотров 825. Ответов 18
Метки нет (Все метки)

Можно ли мне взять любой name.exe, потом его открыть считать через fopen(name.exe,"w") , в нем же создать другой name2.exe, и в его все что есть в name.exe записать в name2.exe.Получиться ли у меня сделать name2.exe, такой как name.exe, и будет ли он работать???
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.05.2015, 21:07
Ответы с готовыми решениями:

Написать функцию, которая создает копию другого двумерного динамического массива
Написать функцию, которая создает копию другого двумерного динамического массива. Тип элемента...

Написать программу, которая создает файл
Здравствуйте! Помогите написать программу на Visual Studio 2010. Задание: Написать программу,...

Написать программу, которая пишет для содержимого файла его копию.
Написать программу, которая пишет для содержимого файла его копию.

Написать программу, которая создает матрицу NxN с элементами
Написать программу, которая создает матрицу NxN с элементами, пронумерованными по скручивающейся...

Написать программу, которая создает строку. ( сложная задачка )
Написать программу, которая создает строку, состоящий из степеней от одного до трех указанного...

18
Байт
Эксперт C
21157 / 13349 / 2808
Регистрация: 24.12.2010
Сообщений: 28,139
07.05.2015, 22:08 2
Цитата Сообщение от Restomix Посмотреть сообщение
fopen(name.exe,"w") ,
Имелось в виду f1 = fopen("name.exe", "rb"); - Да?
А потом f2 = fopen("name2.exe", "wb");
И переписать.
В виндоусе - будет работать.
В Линухе надо еще будет изменить права (сделать файл выполняемым)
Но для начала всетки разберитесь с функцией fopen...
1
Restomix
1 / 1 / 0
Регистрация: 07.05.2015
Сообщений: 79
07.05.2015, 22:43  [ТС] 3
Байт, да, спасибо, обязательно разберусь
0
MrGluck
Форумчанин
Эксперт CЭксперт С++
8134 / 4985 / 1436
Регистрация: 29.11.2010
Сообщений: 13,456
08.05.2015, 00:28 4
Можно просто использовать WinAPI функцию копирования файлов.
0
08.05.2015, 00:28
Restomix
1 / 1 / 0
Регистрация: 07.05.2015
Сообщений: 79
08.05.2015, 18:19  [ТС] 5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <fstream>
using namespace std;
 
int main()
{   setlocale(LC_ALL,"rus");
    FILE *p;
    FILE *p2;int n;
    p=fopen("C:\\Users\\name.exe","rb");
    p2=fopen("name2.exe","wb");
    if(p2==NULL || p==NULL)
    {
        cout<<"EROR";
    }
    char ch;
    while ((ch=fgetc(p))!=EOF)
    {   
    fwrite(&ch, sizeof(char), 1,p2);
    }
    fclose(p);
    fclose(p2);
    return 0;
}
вот, что получилось.Но не работает как нужно, где может быть ошибка?Помогите пожалуйста
0
nmcf
6532 / 5756 / 2621
Регистрация: 14.04.2014
Сообщений: 24,492
08.05.2015, 18:45 6
Цитата Сообщение от Байт Посмотреть сообщение
В Линухе надо еще будет изменить права (сделать файл выполняемым)
Разве не атрибут файла?

Добавлено через 1 минуту
Restomix, создаёшь буфер и читаешь через fread(), записываешь через fwrite().
0
gazlan
3163 / 1922 / 312
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1
08.05.2015, 18:52 7
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
#include<stdio.h>
 
int main(int argc,char** argv)
{
   if (argc != 1)
   {
      // Error !
      return 0;
   }
 
   FILE*    pIn = fopen(argv[0],"rb");
 
   char     pszName[MAX_PATH];
 
   strcpy(pszName,argv[0]);
   strcat(pszName,".copy");
 
   FILE*    pOut = fopen(pszName,"wb");
 
   int   iChr = 0;
 
   while ((iChr = fgetc(pIn)) != EOF)
   {
      fputc(iChr,pOut);
   }
 
   fclose(pIn);
   fclose(pOut);
 
   return 0;
}
1
Restomix
1 / 1 / 0
Регистрация: 07.05.2015
Сообщений: 79
08.05.2015, 19:57  [ТС] 8
Спасибо большое всем очень помогли, сделал.И еще можно сделать так чтоб, когда создавало имя файла, копию name2.exe, оно проверяло если он уже существует, создать под именем name3.exe и так дальше?
Код что получился:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <fstream>
#include <stdio.h>
using namespace std;
int main()
{   setlocale(LC_ALL,"rus");
    FILE *p;
    FILE *p2;int n;
    p=fopen("C:\\Users\\ГћГ°Г*\\Desktop\\name.exe","rb");
    p2=fopen("name2.exe","wb");
    if(p2==NULL || p==NULL)
    {
        cout<<"EROR";
    }
    int ch=0;
    while ((ch=fgetc(p))!=EOF)
    {   
        fputc(ch,p2);
    }
    fclose(p);
    fclose(p2);
    return 0;
}
0
Байт
Эксперт C
21157 / 13349 / 2808
Регистрация: 24.12.2010
Сообщений: 28,139
08.05.2015, 22:25 9
Цитата Сообщение от Restomix Посмотреть сообщение
оно проверяло
C++
1
2
3
4
5
6
7
8
9
10
char name[20];
for(int i=2; i<100; i++) {
  sprintf(name, "name%d.exe", i);
  if (access(name, 0))  break;
}
if (i==100) { cout << "Много вас..."; return 1; }
else {
 // ...
 f2 = fopen(name, "wb");
 // ...
Есть и другие способы проверки существования файла.
Можно, например, попытаться открыть его на чтение. Неудачно - значит файла нет.
Есть и всякие АПИшные функции...

Добавлено через 6 минут
Restomix, Вдогонку хочу обратить твое внимание на пару ошибок в коде поста 5 (хоть они и исправлены в последующих, но требуют отдельного рассмотрения (акцентирования))
1. int ch. Ибо fgets возвращает именно int. И только так можно поймать EOF
2. Никогда не путай gets - puts и fread - fwrite. Читать-писать надо по одной из этих двух схем, не смешивая
1
Restomix
1 / 1 / 0
Регистрация: 07.05.2015
Сообщений: 79
08.05.2015, 23:26  [ТС] 10
Байт, спасибо, я учел ваши советы.А если в цикле, печатать числа из файла, от будет бесконечный или в нем на сколько много чисел, и он идет он идет так долго, конца не видел ещо
C++
1
2
3
4
5
while ((ch=fgetc(p))!=EOF)
    {   
        fputc(ch,p2);
        cout<<ch;
    }
0
Байт
Эксперт C
21157 / 13349 / 2808
Регистрация: 24.12.2010
Сообщений: 28,139
08.05.2015, 23:51 11
Цитата Сообщение от Restomix Посмотреть сообщение
будет бесконечный или в нем на сколько много чисел, и он идет он идет так долго, конца не видел ещо
int ch - точно?
0
lss
931 / 860 / 355
Регистрация: 10.10.2012
Сообщений: 2,706
09.05.2015, 00:10 12
Без cout << ch код завершается?
0
Restomix
1 / 1 / 0
Регистрация: 07.05.2015
Сообщений: 79
09.05.2015, 00:13  [ТС] 13
lss, да
0
lss
931 / 860 / 355
Регистрация: 10.10.2012
Сообщений: 2,706
09.05.2015, 00:14 14
Цитата Сообщение от Restomix Посмотреть сообщение
да
Значит просто файл большой (какой размер файла?), на вывод много времени тратится.
0
Restomix
1 / 1 / 0
Регистрация: 07.05.2015
Сообщений: 79
09.05.2015, 00:18  [ТС] 15
Байт, точно int

Добавлено через 1 минуту
lss, 6.4 мб
0
lss
931 / 860 / 355
Регистрация: 10.10.2012
Сообщений: 2,706
09.05.2015, 00:30 16
Вот так вывод сделай, будет видно сколько байт считано и записано:
C++
1
2
3
4
5
6
7
8
int ch=0;
    n = 0;
    while ((ch=fgetc(p))!=EOF)
    {   
        fputc(ch,p2);
        ++n;
        cout << n << ' ';
    }
0
dimcoder
Полярный
473 / 445 / 158
Регистрация: 11.09.2011
Сообщений: 1,153
09.05.2015, 00:33 17

Не по теме:

извиняюсь за оффтоп


Сила в единстве
1
Миниатюры
Написать программу, которая создает свою копию  
lss
931 / 860 / 355
Регистрация: 10.10.2012
Сообщений: 2,706
09.05.2015, 00:37 18
Цитата Сообщение от Restomix Посмотреть сообщение
6.4 мб
А вот так будет выводить сколько байтов осталось прочитать:
C++
1
2
3
4
5
6
7
8
9
10
11
    fseek(p, 0, SEEK_END);
    long long file_size = ftell(p); // размер файла в байтах
    rewind(p);
    
    int ch=0;
    while ((ch=fgetc(p))!=EOF)
    {   
        fputc(ch,p2);
        --file_size;
        cout << file_size << ' ';
    }
1
Restomix
1 / 1 / 0
Регистрация: 07.05.2015
Сообщений: 79
09.05.2015, 09:14  [ТС] 19
lss, понял, большое спасибо)
0
09.05.2015, 09:14
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.05.2015, 09:14

Написать программу, которая создает и обрабатывает массив структур согласно индивидуальному заданию
Написать программу на языке С ++, которая создает и обрабатывает массив структур согласно...

Написать программу, которая создает двумерный массив со случайными числами A[N,M]. Вычислить сумму и число положительных элементов массива
Написать программу, которая с помощью датчика случайных чисел создает двумерный массив A. Вычислить...

Напишите программу, которая создает поток
Напишите программу, которая создает поток. Используйте атрибуты по умолчанию. Родительский и вновь...


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru