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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.83
Мысщъ
 Аватар для Мысщъ
0 / 0 / 0
Регистрация: 25.02.2007
Сообщений: 37
29.07.2008, 08:55     Проблемы при работе с файлами #1
доброго времени!
возник у меня маленький трабл при работе с файлами. Причем совершенно не могу понять причину. Код такой:
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

потом советует обратиться к документации. Документации у меня нет, потому и полез сюда
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
mikityak
 Аватар для 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
Регистрация: 25.02.2007
Сообщений: 37
30.07.2008, 14:38  [ТС]     Проблемы при работе с файлами #3
если явно задаю имя файла, т.е. прописываю его в вызове функции, то ошибки нет, а вот если я передаю имя файла в переменной - есть :-(
Vourhey
Почетный модератор
6470 / 2245 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
30.07.2008, 14:54     Проблемы при работе с файлами #4
надеюсь, Вы адрес переменной в функцию передаете?
Lord_Voodoo
Супер-модератор
 Аватар для Lord_Voodoo
8505 / 2172 / 61
Регистрация: 07.03.2007
Сообщений: 10,844
Завершенные тесты: 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
Регистрация: 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]), то собственно опять натыкаемся на ту самую ошибку, с которой я сюда и пришел...
Lord_Voodoo
Супер-модератор
 Аватар для Lord_Voodoo
8505 / 2172 / 61
Регистрация: 07.03.2007
Сообщений: 10,844
Завершенные тесты: 1
30.07.2008, 18:07     Проблемы при работе с файлами #7
путь выглядеть должен так - file_read_func("g:\\test.txt"), и еще бы проверить неплохо, а есть ли у тебя третий параметр, который ты передаешь в функцию...
а тебе обязательно именно через fstream организовывать чтение, есть менее замороченные способы, могу пример подкинуть, чтобы ты не мучался... а еще покажи пример вызова программы с параметрами...
Мысщъ
 Аватар для Мысщъ
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"
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.07.2008, 18:23     Проблемы при работе с файлами
Еще ссылки по теме:

C++ Ошибка "Попытка чтения в запрещенную память" при работе с файлами
C++ Дополнение к работе с файлами
C++ Ошибка при работе с файлами: C4996: 'fopen': This function or variable may be unsafe
Обработка исключений при работе с файлами C++
Ошибка при работе с файлами C++

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

Или воспользуйтесь поиском по форуму:
Lord_Voodoo
Супер-модератор
 Аватар для Lord_Voodoo
8505 / 2172 / 61
Регистрация: 07.03.2007
Сообщений: 10,844
Завершенные тесты: 1
30.07.2008, 18:23     Проблемы при работе с файлами #9
ИМХО, через функции fopen, fclose, fgets, fputs - проще чтение реализуется... а на счет двух символов, я твою прогу тестил (первый вариант), читает нормально весь файл, зачем ты в этом месте код поменял...
C++
1
2
3
4
5
    while (!file.eof()) 
    { 
        file >> ch; 
        cout << ch; 
    }
- этого вполне достаточно...
Yandex
Объявления
30.07.2008, 18:23     Проблемы при работе с файлами
Ответ Создать тему
Опции темы

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