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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Нужна помощь, Пишу программу для работы с файлом 
:(
    Опции темы
Atasik
Дата 12.12.2010, 17:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Помогите, пожалуйста, новичку. Пишу программу для работы с файлов. Метод, который должен открывать файл, его не открывает. Подскажите почему? 
Код
#include <fstream>
#include <iostream.h>
#include <vector>
#include <russian.h> 

using namespace std;

//Класс, объекты которого производят запись в файлы
class FileWriter
{
    
    fstream *obj;
    char filename[80];
    int pos;
    char * info; 
public:
    FileWriter();
    FileWriter(char *filename);
    ~FileWriter();
    int OpenFile();       // открытие файла
    void Add(int pos,char *info);   // добавление записи в файл
};
    //Конструктор по умолчанию (только создает объект класса)
    FileWriter::FileWriter()
    {
        
        cout << "Работает конструктор" << endl;
        cout << "FileWriter initialized" << endl;
    }

    //Конструктор, принимающий в качестве параметра имя файла, в который будет производиться запись
    FileWriter::FileWriter(char *_filename)
    {
        cout << "Работает конструктор с параметроm" << endl;
        strncpy(filename,_filename,80);
        obj=new fstream();    
    }

    //Деструктор
    FileWriter::~FileWriter()
    {
        cout << "Работает деструктор" << endl;
        obj->close();
        delete obj;
    
    }

    int FileWriter::OpenFile()
    {
        cout << "Работает функция открытия файла" << endl;
        obj->open(filename, ios::app|ios::binary);
        if (!obj->is_open()) return -1;  //bool is_open() - определяет открыт ли файл
        return 0;
    }

    void FileWriter::Add(int _pos,char *_info)
    {
        cout << "Работает функция добавления информации в файл" << endl;
        pos=_pos;
        obj->seekp(pos,ios_base::beg);
        obj->write(_info,sizeof(_info));
        obj->flush();
    }

    
int main(void)
{
    FileWriter fw("File.bin");
    cout << fw.OpenFile() <<endl;
       if(fw.OpenFile() == -1)  
   { cout << "Файл не открыт\n"; 
      return -1; 
   } 
    char ss[50];
    cout << "Vvod str" << endl;
    cin.getline(ss,49,'\n');
    fw.Add(3, ss);
    

}



Модератор: Код нужно размещать внутри сообщения, используя кнопку "Код"

Это сообщение отредактировал(а) bsa - 12.12.2010, 19:30
PM MAIL   Вверх
bsa
Дата 12.12.2010, 19:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



1. вместо iostream.h используй просто iostream
2. конструктор FileWriter::FileWriter() не инициализирует obj, соответственно OpenFile может вызвать метод open для неинициализированного объекта.

Я бы на твоем месте почитал описание fstream и сделал бы аналогично - в этом случае не пришлось бы добавлять еще одну переменную для хранения имени файла.
PM   Вверх
TupDub
Дата 12.12.2010, 19:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



А ты уверен, что файл, который ты пытаешься открыть лежит в той же папке, что и программа ? 
У меня на компе твой код открывает файл.
PM   Вверх
Atasik
Дата 12.12.2010, 19:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Уверена. Странно, у меня не отркрывает
PM MAIL   Вверх
TupDub
Дата 12.12.2010, 19:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Я немного подправил код под себя, у меня убунту. Вот в таком варианте, файл открывается. Имя файлы у меня другое.


Присоединённый файл ( Кол-во скачиваний: 4 )
Присоединённый файл  main.cpp 1,96 Kb
PM   Вверх
Atasik
Дата 12.12.2010, 20:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



:( У меня все равно не работает. А с каким расширением должен быть файл? Я пробовала txt, bin. Может в этом у меня ошибка?
PM MAIL   Вверх
TupDub
Дата 12.12.2010, 20:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



У меня файл просто называется fff без расширений. Переименовал в File.dat всё работает. ФАЙЛ У МЕНЯ ЛЕЖИТ В ТОЙ ЖЕ ДИРЕКТОРИИ, ЧТО И ИСПОЛНЯЕМЫЙ ФАЙЛ.
PM   Вверх
Atasik
Дата 12.12.2010, 20:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



И У МЕНЯ ЛЕЖИТ В ТОЙ ЖЕ ДИРЕКТОРИИ, ЧТО И ИСПОЛНЯЕМЫЙ ФАЙЛ.
PM MAIL   Вверх
xvr
Дата 13.12.2010, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Цитата(Atasik @ 12.12.2010,  20:42)
И У МЕНЯ ЛЕЖИТ В ТОЙ ЖЕ ДИРЕКТОРИИ, ЧТО И ИСПОЛНЯЕМЫЙ ФАЙЛ.

А программа видимо запускается В ДРУГОЙ. У VS например рабочая директория (по умолчанию) - это директория, где лежит файл проекта, а не та, где лежит exeник. У других IDE могут быть дркгие директории  smile Задай имя файла с полным путем.

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


Новичок



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

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



О! я не подумал об этом!  smile 
PM   Вверх
Atasik
Дата 14.12.2010, 13:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Та же беда и с полным путем. Сегодня поеду к преподу, пусть он посмотрит
PM MAIL   Вверх
boostcoder
Дата 14.12.2010, 14:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


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

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



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

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

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

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

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


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

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


 




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


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

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