Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/12: Рейтинг темы: голосов - 12, средняя оценка - 4.83
 Аватар для Мысщъ
0 / 0 / 0
Регистрация: 25.02.2007
Сообщений: 37

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

29.07.2008, 08:55. Показов 2703. Ответов 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
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
29.07.2008, 08:55
Ответы с готовыми решениями:

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

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

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

8
 Аватар для mikityak
617 / 22 / 0
Регистрация: 30.09.2007
Сообщений: 357
29.07.2008, 11:23
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  [ТС]
если явно задаю имя файла, т.е. прописываю его в вызове функции, то ошибки нет, а вот если я передаю имя файла в переменной - есть :-(
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
30.07.2008, 14:54
надеюсь, Вы адрес переменной в функцию передаете?
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
30.07.2008, 15:18
ошибку дает, когда пишешь так:
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  [ТС]
видимо, без приведения полнго кода не обойтись...
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
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
30.07.2008, 18:07
путь выглядеть должен так - file_read_func("g:\\test.txt"), и еще бы проверить неплохо, а есть ли у тебя третий параметр, который ты передаешь в функцию...
а тебе обязательно именно через fstream организовывать чтение, есть менее замороченные способы, могу пример подкинуть, чтобы ты не мучался... а еще покажи пример вызова программы с параметрами...
0
 Аватар для Мысщъ
0 / 0 / 0
Регистрация: 25.02.2007
Сообщений: 37
30.07.2008, 18:17  [ТС]
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
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
30.07.2008, 18:23
ИМХО, через функции fopen, fclose, fgets, fputs - проще чтение реализуется... а на счет двух символов, я твою прогу тестил (первый вариант), читает нормально весь файл, зачем ты в этом месте код поменял...
C++
1
2
3
4
5
    while (!file.eof()) 
    { 
        file >> ch; 
        cout << ch; 
    }
- этого вполне достаточно...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
30.07.2008, 18:23
Помогаю со студенческими работами здесь

Искажение данных при работе с файлами
Всем привет! Столкнулся с такой проблемой при работе с файлами: Например есть файл со следующим содержимым: После записи его строк в...

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

Ошибка на этапе исполнения при работе с файлами
Здравствуйте, писал прогу по работе с файлами и структурами, наткнулся на такую траблу. После работы программы по введению ФИО, телефона и...

Список запрещенных слов при работе с файлами
Здравствуйте, уважаемые форумчане! Работаю над проектом по проверке кодов решений для задач, отправляемых через редактор кода на сайте....

Проблемы при работе с шейдэрами
пытаюсь написать шейдер, простейший. вот код его описания const char* Vertex_Shader_Descrip = &quot;#version 330/n&quot; ...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru