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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.04.2010, 23:50   #1
4thWing
Новичок
Джуниор
 
Регистрация: 20.03.2010
Сообщений: 2
По умолчанию работа с файлами

Помогите пожалуста разобратьсяНужно ,для начала сделать программу что бы в неё писал имя файла если такой фаил есть то она должна его открывать если нету то фаил с таким именем должен создаться.
вот посмотрите что я сделал только почему-то не могу понять как добиться чтобы фаил создавался.
Код:
#include <stdio.h>
#include <stdlib.h>
#include <io.h>
#include <fcntl.h>
#include <sys\types.h>
#include <sys\stat.h>
#include <errno.h>
#include <string.h>
#include <conio.h>
#define COLVO 5

typedef struct {int h; int m;} like_tm_struct_Rec; /* ;D */

typedef struct {
   char den_nedeli[15];
   char I_para[15];
   char II_para[15];
   like_tm_struct_Rec t;
} RospisanieRec;

RospisanieRec t[COLVO];

int main(void)
	{
//A:
	 clrscr();

	 FILE *fl;
	 int i,m;
	 char fname[BUFSIZ];
	 struct stat filestat;
	 RospisanieRec tmp;

	// while(m=2)
	 //{
	 while(1)
		{
		puts("Nomer nedeli:");
		if(gets(fname) && strlen(fname))break;
		}
	 if( stat( fname, &filestat ) )
		{
		perror(fname); exit(1);
		}
	 if( (fl=fopen(fname, "r")) == NULL)
		{
		perror(fname); exit(1);
		}
	 for(i=0;i<COLVO; i++)
		{
		fread(&t[i], sizeof(RospisanieRec), 1, fl);
		printf("%s\n%s\n%s", t[i].den_nedeli, t[i].I_para,t[i].II_para);
		}
	 printf("###########################################\n");
	 printf("# 1.Izmenit # 2.K vuboru nedeli # 3.Vuhod #\n");
	 printf("###########################################\n");
	 scanf("%s",&m);
	// }

//B:
   if( (fl=fopen(fname, "w")) == NULL) { perror(fname); exit(1); }
   for(i=0; i<COLVO; i++) {
       printf("Vvedite %d den nedeli ", i+1);
       gets(t[i].den_nedeli);
       printf("Vvedite I paru ");
       gets(t[i].I_para);
       printf("Vvedite II paru ");
       gets(t[i].II_para);
       fwrite(&t[i], sizeof(RospisanieRec), 1, fl);
   }
   fclose(fl);
тут есть закоментированные строчки , это я пытался сделать меню для редактирования файла

Последний раз редактировалось MaTBeu; 12.04.2010 в 17:10.
4thWing вне форума Ответить с цитированием
Старый 12.04.2010, 00:01   #2
Ozerich
Студент 1 курса
Форумчанин Подтвердите свой е-майл
 
Аватар для Ozerich
 
Регистрация: 27.06.2008
Сообщений: 959
По умолчанию

Без форматирования и без выделения кода в тег [code] в вашем коде разобраться тяжело

Вот так можно открыть файл для чтения, а если его не существует он создаётся

Код:
#include "stdio.h"

int main()
{
	char inname[100];
	scanf("%s", &inname);
	FILE *f = fopen(inname, "w+");
	f = fopen(inname, "r+");
	
	return 0;
}
C++(STL, QT, WinInet) / DHTML(CSS) / JavaScript / PHP Developer
Ozerich вне форума Ответить с цитированием
Старый 12.04.2010, 00:05   #3
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

Код:
FILE *f = fopen(inname, "w+");
f = fopen(inname, "r+");
помоему это перезатрет существующий файл...
ну на всякий случай можно еще так:
Код:
FILE *f = fopen(inname, "r");
if( !f ) f = fopen(inname,"w+");
NiCola999 вне форума Ответить с цитированием
Старый 12.04.2010, 00:09   #4
Ozerich
Студент 1 курса
Форумчанин Подтвердите свой е-майл
 
Аватар для Ozerich
 
Регистрация: 27.06.2008
Сообщений: 959
По умолчанию

NiCola999,Ты абсолютно прав. Твой вариант будет работать как надо.
C++(STL, QT, WinInet) / DHTML(CSS) / JavaScript / PHP Developer
Ozerich вне форума Ответить с цитированием
Старый 12.04.2010, 00:44   #5
l4h
Новичок
Джуниор
 
Регистрация: 11.04.2010
Сообщений: 3
По умолчанию

FILE *fopen(const char *path, const char *mode) - описание функции fopen
так вот если мы в качестве режима доступа выберем "a+" то файл если он существует будет открыт для добавления информации, а если не существует будет создан.


поэтому код принимает вид:
Код:
....
if(fl=fopen("filename","a+")){
    ..../*Здесь мы что-то делаем с этим файлом, если он удачно открылся, можно
          изменить условие на противоположное, тогда в теле if будет выводиться 
          ошибка и например выход из программы.*/
}
.....
Вот собственно и все, и без лишних if, и читабельность кода повышается =)
l4h вне форума Ответить с цитированием
Старый 12.04.2010, 01:04   #6
4thWing
Новичок
Джуниор
 
Регистрация: 20.03.2010
Сообщений: 2
По умолчанию

Спасибо огромное завтра буду пробывать
4thWing вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с файлами СИ Stases Общие вопросы C/C++ 7 03.01.2010 14:28
Работа с файлами JamS007 Общие вопросы C/C++ 4 27.06.2009 22:03
Работа с файлами Cpluser Общие вопросы C/C++ 2 16.02.2009 23:22
Работа с файлами Acros Помощь студентам 5 14.02.2007 18:40