IPB

Здравствуйте, гость ( Вход | Регистрация )

С++, Открытие файлов своей прогой
Cj_Lelik
сообщение 11-01-2009, 13:03
Сообщение #1


Новобранец


Группа: Постояльцы
Сообщений: 61
Регистрация: 06-09-2005
Из: Дар
Пользователь №: 2656



Нужна помощь !!! Подскажите как открыть и прочитать файл в программе на языке C++ ?
Если кто может покажите на примере как можно прочитать текстовый файл !!!
Перейти в начало страницы
 
+Цитировать сообщение
 
Начать новую тему
Ответов (1 - 10)
Гость_r.e.d.r.a.m.(гость)
сообщение 11-01-2009, 14:26
Сообщение #2





Гости (без регистрации)






Лёха, в аське трудно спросить? wink.gif
реализация нужна именно в cpp? т.е. объектная?
CODE
#include <iostream.h>
#include <fstream.h>
#include <conio.h>

void main()
{
char ch;
ifstream in("C:\\file.txt", ios::in);
if (!in)
{
cout << "Can't open file!\n";
}
while (in)
{
in.get(ch);
if(in) cout << ch;
}
in.close();
getch();
}


Сообщение отредактировал r.e.d.r.a.m. - 11-01-2009, 14:28
Перейти в начало страницы
 
+Цитировать сообщение
kil|er
сообщение 13-01-2009, 19:07
Сообщение #3


Частый гость
*

Группа: Постояльцы
Сообщений: 116
Регистрация: 08-11-2005
Из: город Запорожье
Пользователь №: 3017



Тебе в Console Application или на MFC(с FileDialog)??? )


--------------------
Перейти в начало страницы
 
+Цитировать сообщение
kil|er
сообщение 13-01-2009, 19:45
Сообщение #4


Частый гость
*

Группа: Постояльцы
Сообщений: 116
Регистрация: 08-11-2005
Из: город Запорожье
Пользователь №: 3017



Вот тебе еще один вариант "Win32 Colsole Application":
Код
#include <iostream.h>
#include <fstream.h>

void main()
{
    char cBuf;
    char cFileName[20];
    ifstream buf;
    //--------------------
    cout<<"Input file name>>";
    cin>>cFileName;
    //--------------------
    buf.open(cFileName);
    while(buf.read((char*)&cBuf, sizeof cBuf))
    {
        cout<<cBuf;
    }
    cout<<"\n";
    buf.close();
}


А также если нужно, то в MFC + CFileDialog:

Где:
m_print - переменная элемента CEditBox:
СFileDialog - класс создания файлового диалога

Код
void COpen_file_mfcDlg::OnButopenfile()
{
    // TODO: Add your control notification handler code here
    m_print="";
    CString rString; //buf variable
    CString cstrBuf;
    CFileDialog dlg(TRUE, "txt", "*.txt");
    if(dlg.DoModal() == IDOK)
    {
        CStdioFile file;
        file.Open(dlg.GetPathName(),CFile::modeRead);
        while(file.ReadString(rString))
        {
            cstrBuf.Format("%s\n",rString);
            m_print+=cstrBuf;
        }
    }
    UpdateData(FALSE);
}


Пользуйся )


--------------------
Перейти в начало страницы
 
+Цитировать сообщение
Гость_Anikey(гость)
сообщение 14-01-2009, 20:32
Сообщение #5





Гости (без регистрации)






ниодна из ваших программ работать не должна
Перейти в начало страницы
 
+Цитировать сообщение
kil|er
сообщение 15-01-2009, 18:17
Сообщение #6


Частый гость
*

Группа: Постояльцы
Сообщений: 116
Регистрация: 08-11-2005
Из: город Запорожье
Пользователь №: 3017



Цитата(Anikey @ 14-01-2009, 20:32) *
ниодна из ваших программ работать не должна

Зайди в Студию - проверь wink.gif


--------------------
Перейти в начало страницы
 
+Цитировать сообщение
Гость_Anikey(гость)
сообщение 16-01-2009, 14:13
Сообщение #7





Гости (без регистрации)






то что этот код где-то работает - ошибка природы.
Код
#include <iostream.h>
#include <fstream.h>

void main()
{
    char cBuf;
    char cFileName[20];
    ifstream buf;
    //--------------------
    cout<<"Input file name>>";
    cin>>cFileName;
    //--------------------
    buf.open(cFileName);
    while(buf.read((char*)&cBuf, sizeof cBuf))
    {
        cout<<cBuf;
    }
    cout<<"\n";
    buf.close();
}


Код
[anikey@junky ~]$ g++ tst.cpp -Wall
tst.cpp:1:22: error: iostream.h: Нет такого файла или каталога
tst.cpp:2:21: error: fstream.h: Нет такого файла или каталога
tst.cpp:4: ошибка: '::main' должна возвращать 'int'
tst.cpp: In function 'int main()':
tst.cpp:8: ошибка: нет декларации 'ifstream' в этой области видимости
tst.cpp:8: ошибка: expected `;' before 'buf'
tst.cpp:10: ошибка: нет декларации 'cout' в этой области видимости
tst.cpp:11: ошибка: нет декларации 'cin' в этой области видимости
tst.cpp:13: ошибка: нет декларации 'buf' в этой области видимости

тем более читать из файла по 1 символу малоэффективно. Еще одно:
Код
[anikey@junky ~]$ ./a.out
Input file name>>01234567890123456789123

Ошибка сегментирования

Переполнение буфера. have fun.
Перейти в начало страницы
 
+Цитировать сообщение
Гость_overlord(гость)
сообщение 21-01-2009, 13:07
Сообщение #8





Гости (без регистрации)






Цитата(kil|er @ 15-01-2009, 19:17) *
Зайди в Студию - проверь wink.gif

к вашему сведению такое поведение не нормально, т.к. программы не должны работать по стандарту.
Код
#include <iostream.h>
#include <fstream.h>
#include <conio.h>

void main()
{
char ch;
ifstream in("C:\\file.txt", ios::in);
if (!in)
{
cout << "Can't open file!\n";
}
while (in)
{
in.get(ch);
if(in) cout << ch;
}
in.close();
getch();
}

в заголовочных файлох не должно быть .h в конце, должно быть указано пространство имен, main должен возвращать int, читать по 1 символу малоэффективно.

Код
#include <iostream.h>
#include <fstream.h>

void main()
{
    char cBuf;
    char cFileName[20];
    ifstream buf;
    //--------------------
    cout<<"Input file name>>";
    cin>>cFileName;
    //--------------------
    buf.open(cFileName);
    while(buf.read((char*)&cBuf, sizeof cBuf))
    {
        cout<<cBuf;
    }
    cout<<"\n";
    buf.close();
}

тут все тоже самое, но ще и переполнение буфера.
Перейти в начало страницы
 
+Цитировать сообщение
kil|er
сообщение 21-01-2009, 13:30
Сообщение #9


Частый гость
*

Группа: Постояльцы
Сообщений: 116
Регистрация: 08-11-2005
Из: город Запорожье
Пользователь №: 3017



Где это так сказано что функция main должна быть только целочисленной? wink.gif Да и смотря для чего человеку надо прочитать файл...! Если же это обратботка посимвольно, то читать нужно так... Если просто вывести на экран, то можно считать построчно и т.д )

Сообщение отредактировал kil|er - 21-01-2009, 13:33


--------------------
Перейти в начало страницы
 
+Цитировать сообщение
Гость_overlord(гость)
сообщение 21-01-2009, 14:21
Сообщение #10





Гости (без регистрации)






Цитата(kil|er @ 21-01-2009, 14:30) *
Где это так сказано что функция main должна быть только целочисленной? wink.gif Да и смотря для чего человеку надо прочитать файл...! Если же это обратботка посимвольно, то читать нужно так... Если просто вывести на экран, то можно считать построчно и т.д )

в стандарте ISO C++...
не зависимо для чего его нужно читать файл. для этого и существует буфер. нельзя читать построчно, читаются только n-ое кол-во байтов
Перейти в начало страницы
 
+Цитировать сообщение
kil|er
сообщение 21-01-2009, 14:27
Сообщение #11


Частый гость
*

Группа: Постояльцы
Сообщений: 116
Регистрация: 08-11-2005
Из: город Запорожье
Пользователь №: 3017



Окей, приму к сведению )


--------------------
Перейти в начало страницы
 
+Цитировать сообщение

Ответить в данную темуНачать новую тему

 



RSS Текстовая версия Сейчас: 18th July 2019 - 22:26