Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.12.2012, 02:29   #1
Proger_1
Пользователь
 
Регистрация: 08.03.2010
Сообщений: 21
По умолчанию Создание/чтение файла

Добрый день.
Задание такое:

Создать файл tovar.dat, записать в него данные о товрае: имя, цена, кол-во, код.
Вывести содержимое файла.
Если файл уже изначально существует то вывести его содержимое сразу.
Вот что удалось сделать:

Код:
#undef UNICODE
#include <iostream>
#include <windows.h>
#include <conio.h>
 
struct tovar
{
    char Code[50];
    char Name[50];
    char Count[50];
    char Cost[50];
};
 
struct tovar air[4];
int N;
HANDLE hFile;
 
 
 
void add();
 
using namespace std;
 
void add()
{
DWORD dwWritten;
cout << "Vvedite kolichestvo zapisej dlja dobavlenija: " << endl;
cin >> N;

for(int i = 0; i < N; i++)
{
	cout << "Vvedite kod tovara " << i+1 << ": " << endl;
	cin >>  air[i].Code;
 	cout << "Vvedite nazvanie tovara " << i+1 << ": " << endl;
	cin >>  air[i].Name;
  	cout << "Vvedite cenu tovara " << i+1 << ": " << endl;
	cin >>  air[i].Cost;
    	cout << "Vvedite kolichestvo tovara " << i+1 << ": " << endl;
	cin >>  air[i].Count;
}

SetFilePointer(hFile, 0,0,FILE_END);

WriteFile(hFile, &air, sizeof(air), &dwWritten, NULL);

}

void main()
{
    hFile = CreateFile("tovar.dat",GENERIC_WRITE,0,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);

    if (hFile = CreateFile("tovar.dat",GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL)) 
    {
        add();
    }
    else
    {
        ReadFile(hFile, &air, sizeof(air), NULL, NULL);
			
    }

cout << "Soderzhimoe faila:" << endl;
for(int i = 0; i < N; i++)
{
	cout<< "Kod tovara:" << air[i].Code << endl;
	cout<< "Nazvanie tovara:" <<air[i].Name << endl;
	cout<< "Cena tovara:" <<air[i].Cost << endl;
	cout<< "Kolichestvo tovara:" <<air[i].Count << endl << endl;
}

    CloseHandle(hFile);
    cout<<"Press any key to exit..."<<endl;
    getch();
}
Проверьте пожалуйста, правильно ли сделал, при запуске добавляю в файл записи, а потом вывожу их, но у меня не получается сразу при запуске проверить создан ли файл и если он уже есть, не надо предлагать вводить записи, а сразу вывести всё его содержимое.
Не поможете?

Последний раз редактировалось Proger_1; 01.12.2012 в 02:52.
Proger_1 вне форума Ответить с цитированием
Старый 01.12.2012, 06:42   #2
hvz-
Форумчанин
 
Регистрация: 14.11.2010
Сообщений: 138
По умолчанию

Используйте функцию OpenFile, если открыть не удалось - значит делаем запись и в файл. Если удалось, выводим содержимое.
hvz- вне форума Ответить с цитированием
Старый 02.12.2012, 18:18   #3
Tahoma
DI HALT RET
Форумчанин
 
Аватар для Tahoma
 
Регистрация: 30.12.2010
Сообщений: 117
По умолчанию

Цитата:
Сообщение от Proger_1 Посмотреть сообщение

Код:
void main()
{
    hFile = CreateFile("tovar.dat",GENERIC_WRITE,0,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);

    if (hFile = CreateFile("tovar.dat",GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL)) 
    {
        add();
    }
    else
    {
        ReadFile(hFile, &air, sizeof(air), NULL, NULL);
			
    }
Зачем используешь дважды hFile? Может в случае с if надо поставить ==, а не =?
Для проверки существования файла можно использовать fopen.

Код:
if (fopen("tovar.dat", "r"))
{
        // чтение
}
else
{
        // создание нового файла
}
p.s.: OPEN_ALWAYS - Opens the file, if it exists. If the file does not exist, the function creates the file as if dwCreationDisposition were CREATE_NEW.

Последний раз редактировалось Tahoma; 02.12.2012 в 18:24.
Tahoma вне форума Ответить с цитированием
Старый 02.12.2012, 20:46   #4
Nuklon
Форумчанин
 
Аватар для Nuklon
 
Регистрация: 05.04.2012
Сообщений: 134
По умолчанию

Код:
HANDLE fp = CreateFile("tovar.dat", GENERIC_READ | GENERIC_WRITE, 
		                FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_ALWAYS, 
                                FILE_ATTRIBUTE_NORMAL, NULL);
if(fp == INVALID_HANDLE_VALUE)
      return 1;

DWORD len = SetFilePointer(fp, 0L, NULL, FILE_END);
SetFilePointer(fp, 0L, NULL, FILE_BEGIN);

if(len == 0uL) { // файл пустой, значит записываем в файл данные
		
   //WriteFile

} else {  // здесь выполняется чтения файла если есть данные

   // ReadFile

}
CloseHandle(fp);
Nuklon вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
чтение из файла Niksan Общие вопросы C/C++ 3 02.05.2011 18:14
Создание/чтение файла и списки в Pascal evilangel Помощь студентам 0 02.02.2011 12:59
С++ Чтение из файла sir.andrey Помощь студентам 9 15.10.2010 16:00
Чтение из файла Amen БД в Delphi 2 09.12.2008 10:40