Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Парни помогите, вы все знаете ответ на этот вопрос 
:(
    Опции темы
bloood
Дата 30.3.2007, 23:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Данная программа сравнивает файлы, вопрос такой:
данная программа запускается с помощью консоли, чтоб запустить надо ввести в консоли
<имя проги> <имя файла1> <имя файла 2>(enter)....как указать в коде пути к файлу1 и файлу2, чтоб не вводить их при запуске из консоли??? <имя проги> это ЕХЕ файл, полученый из кода ниже. Xpsp2, borland turbo c++ 2006. Спасибо!

#include <vcl.h>
#pragma hdrstop
#include <iostream> 
#include <fstream> 
using namespace std;


//---------------------------------------------------------------------------

#pragma argsused
int main(int argc, char *argv[])
{
register int i; 
int numread; 

unsigned char buffer1[4096], buffer2[4096];

if(argc!=3) { 
cout << "Usage: compfiles <file1> <file2>\n";
return 1;
}

ifstream f1(argv[1], ios::in | ios::binary);
if(!f1) {
cout << "Cannot open first file.\n";
return 1;
}
ifstream f2(argv[2], ios::in | ios::binary);
if(!f2) {
cout << "Cannot open second file.\n";
return 1;
}

cout << "Comparing files...\n";

do {
f1.read((char *) buffer1, sizeof buffer1);
f2.read((char *) buffer2, sizeof buffer2);

if(f1.gcount() != f2.gcount()) { 
cout << "Files are of differing sizes.\n"; 
f1.close(); 
f2.close(); 
return 0; 


for(i = 0; i <f1.gcount(); i++) // compare contents of buffers 
if(buffer1[i] != buffer2[i]) { 
cout << "Files differ.\n"; 
f1.close(); 
f2.close();
return 0;


} while(!f1.eof() && !f2.eof()); 

cout << "Files are the same.\n"; 

f1.close(); 
f2.close(); 

return 0;
}
PM MAIL   Вверх
Xenon
Дата 31.3.2007, 01:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Код

#include <vcl.h>
#pragma hdrstop
#include <iostream> 
#include <fstream> 
#include <string>
using namespace std;


//---------------------------------------------------------------------------

#pragma argsused
int main(int argc, char *argv[])
{
    register int i; 
    int numread; 
    unsigned char buffer1[4096], buffer2[4096];
    string path_a = "c:\\BLA-BLA";
    stding path_b = "d:\\BLA-BLA-BLA";
    ifstream f1(path_a, ios::in | ios::binary);
    if(!f1)
    {
        cout << "Cannot open first file.\n";
        return 1;
    }
    ifstream f2(path_b, ios::in | ios::binary);
    if(!f2) 
    {
        cout << "Cannot open second file.\n";
        return 1;
    }
    cout << "Comparing files...\n";
    do 
    {
        f1.read((char *) buffer1, sizeof buffer1);
        f2.read((char *) buffer2, sizeof buffer2);

        if(f1.gcount() != f2.gcount()) 
        { 
            cout << "Files are of differing sizes.\n"; 
            f1.close(); 
            f2.close(); 
            return 0; 
        } 
        for(i = 0; i <f1.gcount(); i++) // compare contents of buffers 
        if(buffer1[i] != buffer2[i]) 
        { 
            cout << "Files differ.\n"; 
            f1.close(); 
            f2.close();
            return 0;
        } 
    }while(!f1.eof() && !f2.eof()); 

    cout << "Files are the same.\n"; 

    f1.close(); 
    f2.close(); 

return 0;
}



--------------------
user posted image  
PM MAIL   Вверх
bloood
Дата 31.3.2007, 10:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Не работает, вот что выдаёт при запуске, номер строки, как в твоём коде....

[C++ Error] Unit1.cpp(18): E2451 Undefined symbol 'stding'
[C++ Error] Unit1.cpp(18): E2379 Statement missing ;
[C++ Error] Unit1.cpp(19): E2285 Could not find a match for 'ifstream::basic_ifstream(string,_Iosb<int>::_Openmode)'
[C++ Error] Unit1.cpp(25): E2451 Undefined symbol 'path_b'
[C++ Error] Unit1.cpp(25): E2285 Could not find a match for 'ifstream::basic_ifstream(undefined,_Iosb<int>::_Openmode)'

Добавлено через 7 минут и 8 секунд
Прошу прощение, опечатка в строке 18 вместо stding, должно быть string....
Но всё равно ошибки в строках 19 и 25 такого плана
[C++ Error] Unit1.cpp(19): E2285 Could not find a match for 'ifstream::basic_ifstream(string,_Iosb<int>::_Openmode)'
[C++ Error] Unit1.cpp(25): E2285 Could not find a match for 'ifstream::basic_ifstream(string,_Iosb<int>::_Openmode)'
PM MAIL   Вверх
mr.Anderson
Дата 31.3.2007, 10:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


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

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



Это речь о том, что нет конструктора класса ifstream с теми аргументами, которые заданы. В скобках может быть указано только имя файла.


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
_Natalia_
Дата 31.3.2007, 11:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



А мона девченки тоже помогут?
Код

char* newpath = new char();
newpath = strcat("C:\\",argv[1]);


попробуй так,  просто конструктор ifstream берет как первый аргумент const char*, а не string,
ну или в предыдущем ответе, просто сделай вот так 
Код

ifstream f1(path_a.c_str(), ios::in | ios::binary);

функция c_str() возвращает string в виде const char*
PM MAIL   Вверх
0lmer
Дата 31.3.2007, 13:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(_Natalia_ @  31.3.2007,  11:25 Найти цитируемый пост)
char* newpath = new char();


а так можно???
PM   Вверх
Xenon
Дата 31.3.2007, 13:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Блин, вот что ночь в людьми делает ... Совсем забыл
Код

#include <vcl.h>
#pragma hdrstop
#include <iostream> 
#include <fstream> 
#include <string>
using namespace std;


//---------------------------------------------------------------------------

#pragma argsused
int main(int argc, char *argv[])
{
    register int i; 
    int numread; 
    unsigned char buffer1[4096], buffer2[4096];
    string path_a = "c:\\BLA-BLA";
    stding path_b = "d:\\BLA-BLA-BLA";
    ifstream f1(path_a.c_str(), ios::in | ios::binary);
    if(!f1)
    {
        cout << "Cannot open first file.\n";
        return 1;
    }
    ifstream f2(path_b.c_str(), ios::in | ios::binary);
    if(!f2) 
    {
        cout << "Cannot open second file.\n";
        return 1;
    }
    cout << "Comparing files...\n";
    do 
    {
        f1.read((char *) buffer1, sizeof buffer1);
        f2.read((char *) buffer2, sizeof buffer2);

        if(f1.gcount() != f2.gcount()) 
        { 
            cout << "Files are of differing sizes.\n"; 
            f1.close(); 
            f2.close(); 
            return 0; 
        } 
        for(i = 0; i <f1.gcount(); i++) // compare contents of buffers 
        if(buffer1[i] != buffer2[i]) 
        { 
            cout << "Files differ.\n"; 
            f1.close(); 
            f2.close();
            return 0;
        } 
    }while(!f1.eof() && !f2.eof()); 

    cout << "Files are the same.\n"; 

    f1.close(); 
    f2.close(); 

return 0;

}

PS. Опередили smile

Добавлено через 1 минуту и 41 секунду
0lmer, У тебя путь из одного символа будет smile

Это сообщение отредактировал(а) Xenon - 31.3.2007, 13:50


--------------------
user posted image  
PM MAIL   Вверх
_Natalia_
Дата 31.3.2007, 13:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(0lmer @  31.3.2007,  13:34 Найти цитируемый пост)

Цитата(_Natalia_ @  31.3.2007,  11:25 )
char* newpath = new char();

a так можно??? 


можно, и это не говорит о размере массива, а только инициализирует указатель. в последствии он может содержать сколько угоодно элементов. если не кажется очень чистой эта записать, тогде делай
char* newpath = new char[1024];
PM MAIL   Вверх
Xenon
Дата 31.3.2007, 14:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Но тогда появится летучий голандец в виде одного элемента char


--------------------
user posted image  
PM MAIL   Вверх
bloood
Дата 31.3.2007, 17:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Блин у меня нет 100 постов, чтоб изменять репутацию, СПАСИБО ВАМ ВСЕМ ОГРОМНОЕ, всё работает как надо...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


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

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


 




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


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

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