Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.79/29: Рейтинг темы: голосов - 29, средняя оценка - 4.79
0 / 0 / 0
Регистрация: 24.06.2016
Сообщений: 3

Обработка исключений при работе с файлами

24.06.2016, 15:26. Показов 5905. Ответов 9

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

C++
1
2
    FILE* file;
    fopen_s(&file, path, "w");
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.06.2016, 15:26
Ответы с готовыми решениями:

Работа с файлами. Обработка исключений
Будьте добры, помогите с решением задач. Заранее благодарю откликнувшихся! :) 1. Создать класс для работы с файлами. В классе...

Обработка ошибок при работе с файлами
Обработка ошибок при работе с файлами.Нужно переписать файл в другой файл заменяя при этом 'f' на 'ф'.Хотелось бы ,что бы в программе мы...

Задания по работе с текстовыми файлами и обработкой исключений
Создать файл, компоненты которого случайные целые числа. Подсчитать, сколько четных чисел при делении на 2 дадут нечетное число. Создать...

9
92 / 81 / 57
Регистрация: 19.02.2016
Сообщений: 336
24.06.2016, 15:43
Как вариант:
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
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
 
void main()
{
    setlocale(LC_ALL, "rus");
    bool f;
    do
    {
        cout << "Введите название файла: ";
        string st;
        cin >> st;
        ifstream fin(st);
        if (fin.is_open())
        {
            f = true;
            cout << "Успешно!" << endl;
        }
        else
        {
            f = false;
            cout << "Невозможно открыть!\nПовторите ввод: " << endl;
        }
    } while (f!=true);
    cout << "Дальнейшая работа!" << endl;
    system("pause");
}
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
24.06.2016, 15:45
nstwf, а где исключения?
0
Неэпический
 Аватар для Croessmah
18146 / 10730 / 2066
Регистрация: 27.09.2012
Сообщений: 27,029
Записей в блоге: 1
24.06.2016, 16:11
Цитата Сообщение от nmcf Посмотреть сообщение
а где исключения?
а где они в
Цитата Сообщение от demid325 Посмотреть сообщение
fopen_s
0
0 / 0 / 0
Регистрация: 24.06.2016
Сообщений: 3
24.06.2016, 18:42  [ТС]
Я и попросил написать обработку исключений для fopen_s, если не удается найти файл
0
Неэпический
 Аватар для Croessmah
18146 / 10730 / 2066
Регистрация: 27.09.2012
Сообщений: 27,029
Записей в блоге: 1
24.06.2016, 19:27
Цитата Сообщение от demid325 Посмотреть сообщение
Я и попросил написать обработку исключений для fopen_s
А разве fopen_s выбрасывает исключения?
Насколько я знаю - нет.
Это нечто Си'шное, там исключений вообще нет.
Так что уточняйте свой вопрос.
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
24.06.2016, 19:34
Он своё исключение хочет, наверное.
0
Неэпический
 Аватар для Croessmah
18146 / 10730 / 2066
Регистрация: 27.09.2012
Сообщений: 27,029
Записей в блоге: 1
24.06.2016, 19:35
Цитата Сообщение от nmcf Посмотреть сообщение
Он своё исключение хочет, наверное.
Как определится что нужно, тогда и посмотрим
0
0 / 0 / 0
Регистрация: 24.06.2016
Сообщений: 3
24.06.2016, 20:10  [ТС]
При неправильном пути к файлу генерируется исключение "filenotfoundexception", у меня мысль, что возможно из-за поддержки CLR. И как его обработать?

Тогда вопрос ради любопытства, что будет в С, если не верный путь к файлу указать?

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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
#include "stdafx.h"
#include <tchar.h>
#include <cstdio>
#include <vcclr.h>
#include <string>
#include <iostream>
#include <objbase.h>
 
#using <mscorlib.dll>
#using <System.xml.dll>
 
 
using namespace std;
using namespace System;
using namespace System::Xml;
using namespace System::IO;
using namespace System::Runtime::InteropServices;
 
extern const IID IID_ITransformFile;
 
 
class ITransformFile : public IUnknown
{
public:
    virtual void __clrcall execute(String^ pathSource, char* path) = 0;
};
 
class CTransformFile : public ITransformFile
{
    virtual void __clrcall execute(String^ pathSource, char* path)
    {
        String^ attributes;
        String^ textElement;
 
        XmlTextReader^ xmlReader = gcnew XmlTextReader(pathSource);
 
        FILE* file;
        fopen_s(&file, path, "w");
 
        while (xmlReader->Read())
        {
            switch (xmlReader->NodeType)
            {
            case XmlNodeType::Element:
            {
                                         j += 1;
                                         const char* chars = (const char*)(Marshal::StringToHGlobalAnsi(xmlReader->Name)).ToPointer();
                                         nameSectionMassive[j] = chars;
                                         Marshal::FreeHGlobal(IntPtr((void*)chars));
                                         for (int i = 1; i <= j; i++)
                                         {
                                             if (i == 1)
                                             {
                                                 nameSection = nameSection + nameSectionMassive[i];
                                             }
                                             else
                                             {
                                                 nameSection = nameSection + "/" + nameSectionMassive[i];
                                             }
                                         }
                                         nameSection = "[" + nameSection + "]\n";
                                         char *str = new char[nameSection.length() + 1];
                                         strcpy_s(str, nameSection.length() + 1, nameSection.c_str());
                                         fputs(str, file);
                                         delete[]str;
                                         nameSection.clear();
 
                                         while (xmlReader->MoveToNextAttribute())
                                         {
                                             attributes = xmlReader->Name + "=" + xmlReader->Value + "\n";
                                             char* str = (char*)(void*)Marshal::StringToHGlobalAnsi(attributes);
                                             fputs(str, file);
                                             Marshal::FreeHGlobal(IntPtr((void*)str));
                                         }
                                         break;
            }
            case XmlNodeType::Text:
            {
                                      textElement = "text=" + xmlReader->Value + "\n";
                                      char* str = (char*)(void*)Marshal::StringToHGlobalAnsi(textElement);
                                      fputs(str, file);
                                      Marshal::FreeHGlobal(IntPtr((void*)str));
                                      break;
            }
            case XmlNodeType::EndElement:
            {
                                            j -= 1;
                                            break;
            }
            }
        }
        fclose(file);
    }
    virtual HRESULT __stdcall QueryInterface(const IID& iid, void** ppv);
    virtual ULONG __stdcall AddRef();
    virtual ULONG __stdcall Release();
private:
    int j = 0;
    string nameSection;
    string nameSectionMassive[255];
    long m_cRef;
public:
    CTransformFile() : m_cRef(0) {}
    ~CTransformFile() {}
    
};
 
ULONG __stdcall CTransformFile::AddRef()
{
    return InterlockedIncrement(&m_cRef);
}
 
ULONG __stdcall CTransformFile::Release()
{
    if (InterlockedDecrement(&m_cRef) == 0)
    {
        delete this;
        return 0;
    }
    return m_cRef;
}
 
HRESULT __stdcall CTransformFile::QueryInterface(const IID& iid, void** ppv)
{
    if (iid == IID_ITransformFile)
    {
        *ppv = static_cast<ITransformFile*>(this);
    }
    else
    {
        cout << "QueryInterface: Interface not supported" << endl;
        *ppv = NULL;
        return E_NOINTERFACE;
    }
    reinterpret_cast<IUnknown*>(*ppv)->AddRef();
    return S_OK;
}
 
IUnknown* CreateInstance()
{
    IUnknown* pI = static_cast<ITransformFile*>(new CTransformFile);
    pI->AddRef();
    return pI;
}
 
// {2C237D28-0E97-4BA6-BCB8-92ED923196B5}
extern const IID IID_ITransformFile =
{ 0x2c237d28, 0x0e97, 0x4ba6,
{ 0xbc, 0xb8, 0x92, 0xed, 0x92, 0x31, 0x96, 0xb5 } };
 
void main()
{
    String^ pathSource;
    char* path = new char[255];
 
    cout << "Path of XML FILE: " << endl;
    cin >> path;
 
    for (int i = 0; path[i] != '\0'; i++)
        pathSource += wchar_t(path[i]);
    cout << "Path of INI FILE: " << endl;
    cin >> path;
 
    HRESULT hr;
    IUnknown* pIUnknown = CreateInstance();
    ITransformFile *pICTF = NULL;
 
    hr = pIUnknown->QueryInterface(IID_ITransformFile, (void**)&pICTF);
    if (SUCCEEDED(hr))
    {
        pICTF->execute(pathSource, path);
        pICTF->Release();
    }
    pIUnknown->Release();
    delete[]path;
}
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
24.06.2016, 20:14
Цитата Сообщение от demid325 Посмотреть сообщение
что будет в С, если не верный путь к файлу указать?
fopen() вернёт NULL.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.06.2016, 20:14
Помогаю со студенческими работами здесь

Удаление каталога с файлами. Обработка исключений
DWORD DirExist = GetFileAttributes(PathCreateDir); if (DirExist == 0xFFFFFFFF)/*не найдена*/ { RETRYCREATEDIR: try ...

Перехват исключений при работе с файлом MDB
Очень часто в программе возникают исключения со стандартной информацией об ошибках. Хотел бы научиться перехватывать следующие исключения: ...

Написать класс исключений, возникающих при работе со списком
Задача звучит так: (осталось написать лишь класс исключений, выделено жирным) Как это сделать? С чего начать? Буду благодарна любой...

Обработка исключений при наследовании
В следующей программе на выводе получаю C() B() C::Msg Проследила и вижу, что сначала throw вызывает конструктор B, потом...

Обработка исключений. Как организовать общий обработчик исключений?
У меня есть последовательность вызова методов для внесения данных в таблицу БД. Сам метод внесения данных. Он генерирует исключение ...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
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