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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Программа вызывает JIT отладчик, копирует файлы прописаные в config.ini 
:(
    Опции темы
Dikey
Дата 16.6.2010, 18:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 6.3.2008
Где: Украина г.Изюм

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



Доброго времени суток.
Написал небольшую программку которая копирует файлы прописанные в config.ini
В проекте 3 файла
filecom.h тут реализованы функции для работы с config.ini
Copy.h состоит из функций копирования и добавления к имени файла приставки copy_
File_command.cpp сама программа.
Возникла проблема с копированием 4 файла, которая вызывает отладчик.
Долго думал но так и не понял почему, опыта не хватает.
Помогите пожалуйста исправить.Заранее благодарен.Прошу прощения за запутанность моей программы.

File_command.cpp
Код

#include <iostream>
#include "filecom.h"
using namespace std;

int main()
{
//    
    filecom a;//Объявляю объект читающий файл конфиг
    for (int i=0;i<10;i++){  //
        cout<<i<<endl;    //
        a=i;                      //присваиваю объекту последовательно номера копируемых файлов
    }
    
}



filecom.h
 Скорей всего что тут что то не так
Код


#include <iostream>
#include <string.h>
#include <fstream>
#include "Copy.h"
using namespace std;

class filecom{
    private:
           char *command;
           char buf;
           char *com_buf;
    public:
           filecom(){}
           ~filecom(){delete []com_buf;}
           filecom(int i);                           // конструктор принимающий номера файлов
           void open_file(int num_com); // функция получения нужного имени файла и присвоения его объекту Copy
          
};
filecom::filecom(int i){
        open_file(i);

void filecom::open_file(int num_com){
    int i=0,m=0;
    Copy cap;
    com_buf=new char[30];
    ifstream file_ini("config.ini"); // открываю конфиг
    if (!file_ini){
        cout<<"err";
    }
    while (!file_ini.eof()){
    file_ini>>buf;                           
    if (buf=='-'){                          //пропускаю все то что стоит до тире(минуса) 
         while (!file_ini.eof()){
            file_ini>>buf;        //Записываю в buf пока не достигну ;  когда достигну ; сработает break ниже
            if (buf==';'){         // если достиг ; то переменная m получает номер следующего файла
                m++;
                break;
            }
            if (m==num_com)   // если если номер следующего файла равен номеру нужного файла то скопировать в буфер
            com_buf[i++]=buf;
            
        }
    }
    com_buf[i]='\0';
    }
    cout<<com_buf<<" "; //вывод полученного имени файла
    cap=com_buf;             //присвоение этого имени файла объекту копирования
    file_ini.close();
    
}



Copy.h Сомневаюсь что здесь проблема.
Код

#include <iostream>
#include <fstream>
#include <string.h>

using namespace std;

class Copy{
    private:
    char *file_copy;
    char *file_name;
    char *location;
    int size;
    public:
    Copy();
    Copy(char *f);
    Copy(char *f,char *c);
    ~Copy();
    void get_location(char *f);
    void copy_file(char *file_name,char *file_copy,int size);
    void get_size(char *file_name);
    void get_file_name(char *f);
    void get_copy_name(char *c);
    void set_copy_name();
    friend ostream &operator<<(ostream &os,Copy &cp);    
    
};
Copy::~Copy(){
    delete []file_copy;
    delete []file_name;
    delete []location;
}
Copy::Copy(){
    size=0;
    get_file_name("no_data");
    get_copy_name("no_copy");
}
Copy::Copy(char *f){
    get_file_name(f);
    get_size(file_name);
    get_location(f);
    set_copy_name();
    if (size!=0)
    copy_file(file_name,file_copy,size);
}
Copy::Copy(char *f,char *c){
    get_file_name(f);
    get_location(f);
    get_copy_name(c);
    get_size(file_name);
    if (size!=0)
        copy_file(file_name,file_copy,size);
}
void Copy::get_location(char *f){
    int n=strlen(f);
    int pos;
    for (int i=0;i<n;++i){
        if (strchr("\\",f[i]))
            pos=i;
    }
    location=new char[pos+1];
    strncpy(location,f,pos+1);
    location[pos+1]='\0';
}
void Copy::get_file_name(char *f){
    int n=strlen(f);
    file_name=new char[n+1];
    strcpy(file_name,f);
}
void Copy::get_copy_name(char *c){
    int n=strlen(c);
    file_copy=new char[n+1];
    strcpy(file_copy,c);
}
void Copy::get_size(char *file_name){
    int pic_load,i=0;
    fstream fbin(file_name, ios::binary | ios::in | ios::out);
    if (!fbin){
        size=0;
        get_file_name("Could not be opened");
    }
    while (!fbin.eof()){
        if (size==0)
            break;
        fbin.seekp(i);
        fbin.read(reinterpret_cast<char*>(&pic_load), sizeof(int));
        ++i;
    }
    size=i;
}
void Copy::set_copy_name(){
    char *cpy=new char[6];
    cpy="copy_";
    int i=0,l=strlen(file_name),p=5;
    while (1){
        if (location[i]!=file_name[i]){
                file_copy=new char[(l-i)+5];
                strcpy(file_copy,cpy);
            while(file_name[i]!='\0'){
                file_copy[p++]=file_name[i++];
                  }
            file_copy[p]='\0';
            cout<<file_copy<<"\n";
        break;
        }
        i++;
    }
}
void Copy::copy_file(char *file_name,char *file_copy,int size){
    int pic_load;
    int n=strlen(location)+strlen(file_copy);
    char *loc_faile=new char[n+1];
    strcpy(loc_faile,location);
    strcat(loc_faile,file_copy);
    ofstream out(loc_faile);
    out.close();
    fstream  fbin(file_name, ios::binary | ios::in | ios::out);
    fstream  fbincpy(loc_faile, ios::binary | ios::in | ios::out);
    for (int i=0;i<=size-2;i++){
        fbin.seekp(i);
        fbin.read(reinterpret_cast<char*>(&pic_load), sizeof(int));

        fbincpy.seekp(i);
        fbincpy.write(reinterpret_cast<char*>(&pic_load), sizeof(int));
        pic_load=0;
    }
    fbin.close();
    fbincpy.close();
}
ostream &operator<<(ostream &os,Copy &cp){
    os<<"\n-"<<cp.file_name<<"\n-"<<cp.file_copy<<"\n-size="<<cp.size<<"\n-Location "<<cp.location<<"\n";
    return os;
}



Вот так выглядит файл config.ini

Код

1-f:\\avalonnight2.jpg;
1-f:\\pm.txt;
1-f:\\PaintCAD.jar;
1-f:\\new.txt;
1-f:\\test.txt;
1-f:\\cars.lnk;
1-f:\\stdafx.h;
1-f:\\ger-fxn.gif;
1-f:\\PaintCAD.jad;
1-f:\\wow_self.jpg;




Это сообщение отредактировал(а) Dikey - 16.6.2010, 18:09
PM MAIL WWW ICQ Skype   Вверх
jonie
Дата 16.6.2010, 18:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

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



чтобы это значило:
Код

void Copy::get_file_name(char *f){
    int n=strlen(f);
    file_name=new char[n+1];
    strcpy(file_name,f);

}
 ?? и подобные баги явные...

ЗЫ: как подсвечивают желтым в коде ?

Это сообщение отредактировал(а) jonie - 16.6.2010, 18:34


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Dikey
Дата 16.6.2010, 18:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 6.3.2008
Где: Украина г.Изюм

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



Цитата(jonie @ 16.6.2010,  18:34)
чтобы это значило:
Код

void Copy::get_file_name(char *f){
    int n=strlen(f);
    file_name=new char[n+1];
    strcpy(file_name,f);

}
 ?? и подобные баги явные...

ЗЫ: как подсвечивают желтым в коде наверное кнопкой цвет 

А что тут странного?объясни.

Это сообщение отредактировал(а) Dikey - 16.6.2010, 18:43
PM MAIL WWW ICQ Skype   Вверх
jonie
Дата 16.6.2010, 19:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

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



Dikey, а не, я ошибся - просто метод странный. Дважды если вызвать будет утечка памяти например.


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
bsa
Дата 16.6.2010, 19:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

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



Цитата(jonie @  16.6.2010,  19:34 Найти цитируемый пост)
как подсвечивают желтым в коде ?

тег [ b ] внутри комментария. Сейчас, вроде, и вне комментария работает...

PM   Вверх
Dikey
Дата 17.6.2010, 00:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 6.3.2008
Где: Украина г.Изюм

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



Подскажите в чем проблема?В алгоритмах прокручивал программу не нашел ошибок, что это может быть?
PM MAIL WWW ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

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

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

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

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


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

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


 




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


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

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