С Новым годом! Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
1 / 1 / 0
Регистрация: 20.11.2014
Сообщений: 42

Выдает ошибку при чтении и записи файла

13.03.2015, 17:04. Показов 1224. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Выдает ошибку при чтении и при записи файла. Дебагер указывает соответственно на строку ReadFile или на строку после WriteFile . (First chance exception at $74E9DEEF. Exception class $C0000005 with message 'access violation at 0x74e9deef: write of address 0x00000000'. Process Project1.exe (5492))
Причем данные в файле сохраняются и соответственно считываются в lci_image. Подскажите, люди добрые, где косяк у меня?
Такую ошибку выдает
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
void __fastcall TForm1::Button4Click(TObject *Sender)
{
   // Execute a save file dialog.
  if (SaveDialog1->Execute())
    // First, check if the file exists.
   /*   if (FileExists(SaveDialog1->FileName))
      // If it exists, throw an exception.
      throw(Exception("File already exists. Cannot overwrite."));
    else  */
      {
        HANDLE hFile;
        hFile = CreateFile(SaveDialog1->FileName.c_str(), GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
        if (hFile != INVALID_HANDLE_VALUE)
        {
           WriteFile(hFile, lci_image, lci_size, NULL, NULL );
        }
        else ShowMessage("Ошибка сохранения файла");
 
        CloseHandle(hFile);
      }
 
 
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button2Click(TObject *Sender)
{
  // Execute an open file dialog.
  if (OpenDialog1->Execute())
    // First, check if the file exists.
    if (FileExists(OpenDialog1->FileName))
     { // If it exists, load the data into the memo box.
        HANDLE hFile;
        LPDWORD lpFileSizeHigh;
        hFile = CreateFile(OpenDialog1->FileName.c_str(),GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
        if (hFile != INVALID_HANDLE_VALUE)
        {
            ReadFile(hFile, lci_image, GetFileSize(hFile, lpFileSizeHigh), NULL, NULL );
        }
        else ShowMessage("Ошибка открытия файла");
 
        CloseHandle(hFile);
    //.......
     }
    else
      // Otherwise, throw an exception.
      throw(Exception("File does not exist."));
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
13.03.2015, 17:04
Ответы с готовыми решениями:

Выдает ошибку 0xC0000005: нарушение прав доступа при чтении по адресу
#include <iostream> #include <string> using namespace std; enum kategorie { protein, bcaa, kreatin, Lkarnitin...

FPSpreadsheet выдает SYGSEGV при чтении файла
Если путь к файлу задан без расширения, то пишет: "file not found". Если путь задан с расширением файла, то: "External: SYGSEGV...

При чтении текстового файла выдает иероглифы
при чтении из csv файла выдает в memo иероглифы. Кодировка тут явно не причем так как не показывает даже цифры и англ. текст. читаю ...

4
32 / 30 / 4
Регистрация: 01.02.2014
Сообщений: 878
17.03.2015, 11:13
а ваш lci_image - это что? Указатель? память выдиляли чтобы было куда записывать??
0
1 / 1 / 0
Регистрация: 20.11.2014
Сообщений: 42
17.03.2015, 12:14  [ТС]
Заданый глобально массив
C++
1
2
3
4
5
6
#define x_res 320
#define y_res 240
 
Byte lci_image[x_res*y_res*2];
 
int lci_size = 0;
lci_size вычисляется в процессе заполнения массива данными
C++
1
2
lci_image[lci_size++] = count;
lci_image[lci_size++] = Convert_to_8bit(color);
lci_size всегда <= чем размер lci_image[x_res*y_res*2]
0
32 / 30 / 4
Регистрация: 01.02.2014
Сообщений: 878
17.03.2015, 12:21
ну так функции ReadFile и WriteFile вторым параметром принимают указатель на войд, а вы передаёте параметры,

нужно так
ReadFile(hFile, &lci_image, GetFileSize(hFile, lpFileSizeHigh), NULL, NULL );
WriteFile(hFile, &lci_image, lci_size, NULL, NULL );
0
1 / 1 / 0
Регистрация: 20.11.2014
Сообщений: 42
17.03.2015, 14:28  [ТС]
Ничего не изменилось Всё так же выкидывает ошибку, при этом в файле правильные данные. Но файл занят до закрытия программы.
При чтении данные из файла помещаются в lci_image, и выдает ошибку. Файл также занят до закрытия программы.

P.S. Имя массива это же вроде и есть указатель.

Добавлено через 1 час 25 минут
ВСЁ. Разобрался!!
Нужно вот так:
C++
1
2
DWORD vwCounter;
WriteFile(hFile, lci_image, lci_size, &vwCounter, NULL );
А с чтением:
C++
1
2
3
4
DWORD  vwCounter;
LPDWORD lpFileSizeHigh;
lpFileSizeHigh = new DWORD;
ReadFile(hFile, lci_image, GetFileSize(hFile, lpFileSizeHigh), &vwCounter, NULL );
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.03.2015, 14:28
Помогаю со студенческими работами здесь

Блокировка файла при чтении и записи
осуществляется работа с одним и тем же файлом. Каждый процесс открывает файлОдин процесс пишет в файл, другой - читает из него. нужно...

Ошибки при записи и чтении из файла
double calc(int n, double sum, int a, int b, double p, double f) { if(n == 0) return sum; else{ sum += p...

Задвоение последней записи при чтении из файла
Не могу разобраться почему последняя запись в файле всегда задваивается при выводе void Vivod(void) { struct facultet Fclt; FILE...

Ошибка при чтении/записи из бинарного файла
Сделал простую программу для работы с бинарными файлами, но когда запускаю ее вылетает ошибка. Сделать проще уже некуда, в чем проблема? ...

Выход при неудачном чтении/записи файла
Как правильнее делать? void f() { if ((fl = fopen(&quot;name&quot;, &quot;mode&quot;)) == NULL) { cout &lt;&lt; &quot;Error! &lt;&lt; endl&quot;; exit(1); } ...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru