Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.07.2010, 18:48   #1
Progsenya
Пользователь
 
Регистрация: 30.05.2010
Сообщений: 80
По умолчанию Кто поможет найти ошибку в программе буду рад

программа для копирования файлов
при компиляции находит 2 ошибке
#include <iostream>
#include <windows.h>
#include <io.h>
#include <stdio.h>
using namespace std;
Код:

// Функция, выводящая на экран строку
void RussianMessage(char *str)
{
	char message[100];
	//перевод строки из кодировки Windows 
	//в кодировку MS DOS
	CharToOem(str,message);
	cout<<message;
}
// Функция копирования файла
bool CopyFile(char *source,char *destination){
	const int size=65536;
	FILE *src,*dest;
	// Открытие Файла
	if(!(src=fopen(source,"rb"))){
		return false;
	}
	// Получение дескриптора файла
	int handle=_fileno(src);
	
	// выделение памяти под буффер
	char *data=new char[size];
	if(!data){
		return false;
	}
	// Открытие файла, куда будет производиться копирование
	if(!(dest=fopen(destination,"wb"))){
		delete []data;
		return false;
	}
	int realsize;
	while (!feof(src)){
		// Чтение данных из файла
		realsize=fread(data,sizeof(char),size,src);
		// Запись данных в файл
		fwrite(data,sizeof(char),realsize,dest);
	}

	// Закрытие файлов
	fclose(src);
	fclose(dest);
	return true;
}
void main(){
	// __MAX_PATH - Константа, определяющая максимальный размер пути.
	// Даная константа содержится в stdlib.h
	char source[_MAX_PATH];
	char destination[_MAX_PATH];
	char answer[20];
	RussianMessage("\nВведите путь и название копируемого файлу:\n");
	// Получение пути к первому файлу
	cin.getline(source,_MAX_PATH);
	// Проверка Существует ли файл
	if(_access(source,00)==-1){
		RussianMessage("\nУказан неверный путь или название файла\n");
		return;
	}
	RussianMessage("\nВведите путь и название нового файла:\n");
	// Получение пути к второму файлу
	cin.getline(destination,_MAX_PATH);
	// Проверка на существование файла
	if(_access(destination,00)==0){
		RussianMessage("\nТакой Файл уже существует перезаписать его(1 - Да /2 - Нет)?\n");
		cin.getline(answer,20);
		if(!strcmp(answer,"2")){
			RussianMessage("\nОперация отменена\n");
			return;
		}
		else if(strcmp(answer,"1")){
			RussianMessage("\nНеправильный ввод\n");
			return;
		}
		if(_access(destination,02)==-1){
			RussianMessage("\nНет доступа к записи.\n");
			return;
		}
	}
	
	// Копирование файла 
	if(!CopyFile(source,destination)){
		RussianMessage("\nОшибка при работе с файлом\n");
	}
	
	
}
Progsenya вне форума Ответить с цитированием
Старый 08.07.2010, 19:44   #2
liljon
Форумчанин
 
Регистрация: 03.01.2010
Сообщений: 229
По умолчанию

Вам нужен телепат,а это не на этом форуме.
подпись
liljon вне форума Ответить с цитированием
Старый 08.07.2010, 20:10   #3
Coach_Tyler
 
Регистрация: 08.07.2010
Сообщений: 6
По умолчанию

Да уж, немного запутанно. Хотя за комменты спасибо, сейчас попробую ещё раз.
Coach_Tyler вне форума Ответить с цитированием
Старый 08.07.2010, 23:19   #4
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

если вы компилируете в g++, то нужно функцию майн сделать интовой и везде в майне дописать к ретурнам 1:
Код:
int main(void){
	// __MAX_PATH - Константа, определяющая максимальный размер пути.
	// Даная константа содержится в stdlib.h
	char source[_MAX_PATH];
	char destination[_MAX_PATH];
	char answer[20];
	RussianMessage("\nВведите путь и название копируемого файлу:\n");
	// Получение пути к первому файлу
	cin.getline(source,_MAX_PATH);
	// Проверка Существует ли файл
	if(_access(source,00)==-1){
		RussianMessage("\nУказан неверный путь или название файла\n");
		return 1; 
	}
	RussianMessage("\nВведите путь и название нового файла:\n");
	// Получение пути к второму файлу
	cin.getline(destination,_MAX_PATH);
	// Проверка на существование файла
	if(_access(destination,00)==0){
		RussianMessage("\nТакой Файл уже существует перезаписать его(1 - Да /2 - Нет)?\n");
		cin.getline(answer,20);
		if(!strcmp(answer,"2")){
			RussianMessage("\nОперация отменена\n");
			return 1;
		}
		else if(strcmp(answer,"1")){
			RussianMessage("\nНеправильный ввод\n");
			return 1;
		}
		if(_access(destination,02)==-1){
			RussianMessage("\nНет доступа к записи.\n");
			return 1;
		}
	}
	
	// Копирование файла 
	if(!CopyFile(source,destination)){
		RussianMessage("\nОшибка при работе с файлом\n");
	}
	
   return 0;	
}
у меня работает

Последний раз редактировалось NiCola999; 09.07.2010 в 00:29.
NiCola999 вне форума Ответить с цитированием
Старый 09.07.2010, 00:28   #5
Coach_Tyler
 
Регистрация: 08.07.2010
Сообщений: 6
По умолчанию

Да-да, пока пришёл - проблема уже решена.
Вышеописанный метод на g++ работоспособен и нареканий не вызывает.
Coach_Tyler вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужно найти ошибку в программе (С++) STIFFmaster_LP Помощь студентам 13 24.01.2010 00:44
iTAP (T9). Буду рад советам и помощи. [Witold] Компоненты Delphi 2 03.01.2010 16:46
Паскаль Задачи. примерно 10 буду рад если решите... желательно с блок схемами. Буду сильно благодарен. Азарт Помощь студентам 8 26.03.2009 23:51