Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.83
Мысщъ
0 / 0 / 0
Регистрация: 25.02.2007
Сообщений: 37
#1

Проблемы при работе с файлами - C++

29.07.2008, 08:55. Просмотров 1507. Ответов 8
Метки нет (Все метки)

доброго времени!
возник у меня маленький трабл при работе с файлами. Причем совершенно не могу понять причину. Код такой:
C++
1
2
3
4
5
6
7
8
9
10
11
12
int file_read_func(const char* file_name)
{
           char ch;
    fstream file;
           file.open(file_name, ios::out);
    while (!file.eof())
    {
        file >> ch;
        cout << ch;
    }
    return 0;
};
компилируется нормально, всё ОК. а когда при выполнении доходит до file.open(file_name, ios::out); выдает сообщение:
Debug Assertation Failed!
Program: <путь к проге>
File:mbstowcs.c
Line:69

Expression: s != NULL

потом советует обратиться к документации. Документации у меня нет, потому и полез сюда
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.07.2008, 08:55
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Проблемы при работе с файлами (C++):

Ошибка при работе с файлами - C++
Всем привет! Подккажите, плиз, что у меня неправильно в коде: #include &lt;cstdlib&gt; #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include...

Ошибка при работе с файлами - C++
Необходимо, создать текстовый файл со случайным именем в диапазоне 8 символов, латиница. Вот код: int main() { ...

Проблемы при работе с динамическим распределением памяти - C++
Здравствуйте! Возникла проблема при использовании динамической распределении памяти. Вот код: char* zero; char buf; ...

Флаги при работе с бинарными файлами - C++
Всем привет! Ребята, не могу понять почему у меня удаляются данные из файла. Мне необходимо создать файл и потом в него дописывать...

Обработка исключений при работе с файлами - C++
Кто может помочь с обработкой исключений для файла? Нужно чтобы обработчик перехватывал исключение и предлагал ввести путь к файлу заново....

Ошибка при работе с файлами: C4996: 'fopen': This function or variable may be unsafe - C++
Помогите пожалуйста. писал программу, по данному заданию. вроде как все написал, но с файлами получился косяк. не могу разобраться в чем...

8
mikityak
617 / 22 / 3
Регистрация: 30.09.2007
Сообщений: 357
29.07.2008, 11:23 #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// 333.cpp : Defines the entry point for the console application.
//
 
#include "stdafx.h"
#include "fstream.h"
 
int file_read_func(const char* file_name)
{
           char ch;
    fstream file;
           file.open(file_name, ios::out);
    while (!file.eof())
    {
        file >> ch;
        cout << ch;
    }
    return 0;
};
 
int main(int argc, char* argv[])
{
    file_read_func("001.txt");
    return 0;
}
тет ошыпки ?
0
Мысщъ
0 / 0 / 0
Регистрация: 25.02.2007
Сообщений: 37
30.07.2008, 14:38  [ТС] #3
если явно задаю имя файла, т.е. прописываю его в вызове функции, то ошибки нет, а вот если я передаю имя файла в переменной - есть :-(
0
Vourhey
Почетный модератор
6482 / 2256 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
30.07.2008, 14:54 #4
надеюсь, Вы адрес переменной в функцию передаете?
0
Lord_Voodoo
Супер-модератор
8589 / 2204 / 61
Регистрация: 07.03.2007
Сообщений: 10,966
Завершенные тесты: 1
30.07.2008, 15:18 #5
ошибку дает, когда пишешь так:
C++
1
2
3
4
5
6
int main(int argc, char* argv[])
{
   char* text = "001.txt";
   file_read_func(text);
   return 0;
}
а еще вопрос - ты читать собираешься или писать в файл? из названия функции - вроде бы читать, но файл открыт в режиме записи в файл... не понятно как-то
0
Мысщъ
0 / 0 / 0
Регистрация: 25.02.2007
Сообщений: 37
30.07.2008, 17:58  [ТС] #6
видимо, без приведения полнго кода не обойтись...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#include "stdafx.h"
#include <fstream>
#include <iostream>
#include <string>
#include <stdio.h>
#include <stdlib.h>
 
using namespace std;
 
int file_read_func(char* file_name)
{
    char ch;
    int eof;
    fstream file;
           file.open(file_name, ios::in);
    file.seekg(ios::end);
    eof=file.tellg();
    file.seekg(ios::beg);
    for (int i=0; i!=eof; i++)
    {
        file.seekg(i);
        cout << file.tellg();
        file.get(ch);
        cout << ch << "\n";
    }
    return 0;
};
 
int file_write_func(char* file_name)
{
    cout << "You are writting to file!\n";
    return 0;
};
 
int main(int argc, char *argv[])
{
    char arg1;
    /*switch (argc)
    {
    case 2:
        cout << "Not enought arguments!\n";
        break;
    case 3:
        if (argv[1][1]=='o')
            {  
                file_read_func(argv[3]);
            }
        if (argv[1][1]=='r')
            { 
                file_write_func(argv[3]); 
            }
        else
        {
            cout << "Invalid argument!\n";
        }
        break;
    default:
        cout << "Too much arguments!\n";
        break;
    }*/
    file_read_func("test.txt");
    cin >> arg1;
    return 0;
}
ну и в общем и целом ситуация нынче такая - если вызываю функцию явно, как сейчас - то все отноительно нормально работает, за исключением того, что во-первых, если прописать полный путь к файлу (файл существует), на прмер file_read_func("g:\test.txt"), то почему-то eof=-1, т.е. он ведет себя так, будто файла нет! с существующими ситуация не лучше = воспринял токльно первые два символа тестового файла.
если раскомменировать основную часть, т.е. заменить вызов file_read_func("test.txt") на file_read_func(argv[3]), то собственно опять натыкаемся на ту самую ошибку, с которой я сюда и пришел...
0
Lord_Voodoo
Супер-модератор
8589 / 2204 / 61
Регистрация: 07.03.2007
Сообщений: 10,966
Завершенные тесты: 1
30.07.2008, 18:07 #7
путь выглядеть должен так - file_read_func("g:\\test.txt"), и еще бы проверить неплохо, а есть ли у тебя третий параметр, который ты передаешь в функцию...
а тебе обязательно именно через fstream организовывать чтение, есть менее замороченные способы, могу пример подкинуть, чтобы ты не мучался... а еще покажи пример вызова программы с параметрами...
0
Мысщъ
0 / 0 / 0
Регистрация: 25.02.2007
Сообщений: 37
30.07.2008, 18:17  [ТС] #8
2WooDooMan666
вот в том-то и дело что argv[3] у меня нет... я уже знаю, кто я и все исправил. только вот проблему с тем, что воспринимается только 2 первых символа это не решило
хм... несколько не понял замороченности работы с потоками (признаюсь честно - вообще пока фигово разбираюсь), но если будет более удобный способ - то буду только благодарен
сейчас у меня прописаны в Configuration properties -> Debugging -> command arguments: -o g:\test.txt
когда пошагово прогоняю программу, то отслеживаю значения argv[], там все ок, т.е. argv[0]=путь к программе, argv[1]="-o", argv[2]="g:\test.txt"
0
Lord_Voodoo
Супер-модератор
8589 / 2204 / 61
Регистрация: 07.03.2007
Сообщений: 10,966
Завершенные тесты: 1
30.07.2008, 18:23 #9
ИМХО, через функции fopen, fclose, fgets, fputs - проще чтение реализуется... а на счет двух символов, я твою прогу тестил (первый вариант), читает нормально весь файл, зачем ты в этом месте код поменял...
C++
1
2
3
4
5
    while (!file.eof()) 
    { 
        file >> ch; 
        cout << ch; 
    }
- этого вполне достаточно...
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.07.2008, 18:23
Привет! Вот еще темы с ответами:

Ошибка "Попытка чтения в запрещенную память" при работе с файлами - C++
Нужно хранить в файле данные со структуры и считывать их. Перепробовал кучу вариантов (fopen и ofstream/ifstream), постоянно одна и та же...

Что такое файловый буфер? Что такое режим (модификатор) доступа, при работе с файлами? - C++
Что такое файловый буфер? Что такое режим (модификатор) доступа, при работе с файлами?

Совет по работе с файлами - C++
надо написать программу, которая считывает данные из текстового файла в структуру с 4-мя полями, типа однонаправленный список, а потом...

Подскажите по работе с файлами - C++
struct MyStruct { char * Nam; unsigned int Salary; }; MyStruct emp; *emp.Nam=&quot;Ivan Ivanov&quot;; emp.Salary=109000; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Yandex
Объявления
30.07.2008, 18:23
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru