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

[C] ReadFile/WriteFile - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Подсчитать кол-во одинаковых элементов каждого значения http://www.cyberforum.ru/cpp-beginners/thread763118.html
Дан массив целых чисел, причём каждое из них принадлежит диапазону . Упорядочить элементы массива (отсортировать) по возрастанию. Для этого использовать дополнительный массив. Подсчитать количество...
C++ Вывести фигуру звездочками Ребята, задали задачу не могу докумекать Нужно составить програмку, которая выдает на экран такую фигуру Нули не нужны, только звездочки. 000 * 00*000* * 000000*... http://www.cyberforum.ru/cpp-beginners/thread763117.html
error C3867 C++
Списал код из учебника. Наверное, там где-то опечатка, так как при компиляции возникает ошибка. #include <iostream> using namespace std; class Mammal { public: Mammal():itsAge(1) { }...
C++ Вложенные конечные автоматы
Задание: Добавить возможность использовать в таблице переходов в качестве элемента ссылку на конечный автомат из ранее загруженных. Ниже предлагаю архив в котором почти все реализовано, но почему то...
C++ Выбор слова или словосочетания из списка http://www.cyberforum.ru/cpp-beginners/thread763075.html
Здравствуйте, помогите пожалуйста. Нужна простая программа которая будет делать рандомный выбор 1 слова или словосочетания из списка (через запятую или с новой строки) по типу: Вася, Petya,...
C++ Ошибка LNK2019 Помогите разобраться с этой ошибкой. В программировании я еще новичок, поэтому не все пока понимаю. Задача состоит в том что надо перемножить 2 массива любой размерности. И получаются у меня такие... подробнее

Показать сообщение отдельно
hvz-
0 / 0 / 0
Регистрация: 09.01.2013
Сообщений: 14

[C] ReadFile/WriteFile - C++

16.01.2013, 07:55. Просмотров 682. Ответов 3
Метки (Все метки)

Всем доброго времени суток!
Есть вроблема с програмкой ,а именно: Unhandled exception at 0x010b1493 in lab3.exe: 0xC0000005: Access violation reading location 0x00000000.

Исходник:
Кликните здесь для просмотра всего текста
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
#include <conio.h>
#include <stdio.h>
#include <windows.h>
#include <shlobj.h>
 
struct Student
{
    int code;
    char name[20];
    char surname[20];
    char group[10];
};
 
BOOL CheckStudentDirAndFile(void);
void MakeStudents(Student *st);
void WriteStudentsToFile(Student *st, int stud_number, DWORD *nb);
void ReadStudentsFromFile(int stud_number, DWORD *nb);
void CopyStudentsToDocs(void);
 
int main()
{
    if(CheckStudentDirAndFile() == TRUE)
    {
        HANDLE hFindFile;
        WIN32_FIND_DATAA fdFindData;
        SYSTEMTIME smSysTime;
        hFindFile=FindFirstFileA("C:\\Student\\stud.dat",&fdFindData);
        if(hFindFile != INVALID_HANDLE_VALUE)
        {
            FileTimeToSystemTime(&fdFindData.ftLastWriteTime, &smSysTime);
            printf("%s\t%d.%d.%d  %d:%d\n",fdFindData.cFileName,smSysTime.wDay,smSysTime.wMonth,smSysTime.wYear, smSysTime.wHour, smSysTime.wMinute);
            FindClose(hFindFile);
            printf("Press any key to exit...\n");
            _getch();
            return 0;
        }
    }
    else
    {
        DWORD nb;
        int stud_number=0;
        printf("Enter student's number: ");
        scanf_s("%d", &stud_number);
        Student* st=new Student[stud_number];
        for (int i=0;i<stud_number;i++)
            MakeStudents(&st[i]);
 
        WriteStudentsToFile(st, stud_number, &nb);
        ReadStudentsFromFile(stud_number, &nb);
        CopyStudentsToDocs();
        printf("Press any key to exit...\n");
        _getch();
        return 0;
    }
}
 
BOOL CheckStudentDirAndFile(void)
{
    HANDLE hFile;
    WIN32_FIND_DATAA fdFindData;
    hFile=FindFirstFileA(("C:\\Student\\stud.dat"),&fdFindData);
    if(hFile != INVALID_HANDLE_VALUE)
    {
        FindClose(hFile);
        printf("Founded file C:\\Student\\stud.dat!\n");
        return TRUE;
    }
    else
    {
        if(CreateDirectoryA("C:\\Student", NULL))
        {
            printf("Directory C:\\Student created successfully!\n");
            hFile = CreateFileA("C:\\Student\\stud.dat",GENERIC_WRITE,0,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
            
            if(hFile)
                printf("File stud.dat created successfully!\n");
            else
                printf("Can not create file stud.dat in C:\\Student!\n");
 
            CloseHandle(hFile);
            return FALSE;
        }
        else
        {
            printf("Can not create directry C:\\Students! Possibly already exist.\n");
            CloseHandle(hFile);
            return FALSE;
        }
    }
}
 
void MakeStudents(Student *st)
{
    printf("Student code: ");
    scanf_s("%d", &st->code);
    printf("Student name: ");
    scanf_s("%s", &st->name);
    printf("Student surname: ");
    scanf_s("%s", &st->surname);
    printf("Student group: ");
    scanf_s("%s", &st->group);
}
 
void WriteStudentsToFile(Student *st, int stud_number, DWORD *nb)
{
    HANDLE hFile;
    char file_path[] = "C:\\Student\\stud.dat";
    hFile = CreateFileA(file_path, GENERIC_WRITE, 0, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
    if(!hFile)
    {
        printf("Error while creating file %s for writing!\n", file_path);
        CloseHandle(hFile);
    }
    else
    {
        SetFilePointer(hFile, 4, NULL, FILE_END);
        for (int i=0;i<stud_number;i++)
            WriteFile(hFile,&i,sizeof(&st[i]),&*nb,NULL);
        CloseHandle(hFile);
        printf("\nStudents writed to file %s\n", file_path);
    }
}
 
void ReadStudentsFromFile(int stud_number, DWORD *nb)
{
    HANDLE hFile;
    char file_path[] = "C:\\Student\\stud.dat";
    hFile = CreateFileA(file_path, GENERIC_READ, 0, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
    if(!hFile)
    {
        printf("Error while creating file %s for reading!\n", file_path);
        CloseHandle(hFile);
    }
    else
    {
        printf("%s contains:\n\n", file_path);
        Student *st_buf;
        int i=1;
        ReadFile(hFile, &st_buf, sizeof(Student), &*nb,NULL);
        while (nb!=0)
        {   
            printf("----------%d----------\n", i++);
            printf("Student code: %d\n", st_buf->code);
            printf("Student name: %s\n", st_buf->name);
            printf("Student surname: %s\n", st_buf->surname);
            printf("Student group: %s\n", st_buf->group);
            printf("----------------------\n");
            ReadFile(hFile, &st_buf, sizeof(Student), &*nb, NULL);
        }
        CloseHandle(hFile);
    }
}
 
void CopyStudentsToDocs(void)
{
    char docs_path[50];
    char path[100];
    SHGetFolderPathA(NULL, CSIDL_COMMON_DOCUMENTS, NULL, SHGFP_TYPE_CURRENT, docs_path);
    sprintf_s(path, "%s\\stud.dat", docs_path);
    if(CopyFileA("C:\\Student\\stud.dat", path, TRUE) != FALSE)
        printf("stud.dat copied to %s\n", path);
    else
        printf("Can not copy C:\\Student\\stud.dat file to %s", path);
}

Ошибка выскакивает в функции ReadStudentsFromFile.
Вроде и записываю и читаю правильно, чего я только не делал...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru