C++ Kalıcı Veri Saklama

Başlatan vitruvius, 08 Ekim 2015, 13:49:48

vitruvius

Merhaba,

C++ ile Visual Studio Express 2013 kullanarak bir program yazdım. Şöyle bir ekleme yapmak istiyorum. Kullanıcı üç adet double, bir adet string girecek. Bunları bir şekilde saklayıp daha sonra doğru sırada ulaşmak istiyorum. Program yada bilgisayar kapandıktan sonra da bu veriler kaybolmasın istiyorum.

Bu işi yapmanın güzel yolu nedir? Anahtar kelimeler nedir?

Teşekkürler.

boreas

dosyaya yazma işlemi istediğin. Bir dosya açıp xml gibi bunun içerisine yazarsın daha sonra da okursun. Write file c++ uygun terimler. Windows için registry kaydıda yapabilirsin. Registry microsoftun bu tür kayıtları tuttuğu büyük bir kitaplık gibi düşün. Dosyaya ihtiyacın olmaz registry'de şu adrese şu bilgileri kaydet dersin. Pek çok program pencere pozisyonunu son açılan dosyasını renk ayarlarını burada saklar. Windowsun kara kutusu :)

vitruvius

#2
Program Linux'ta çalışacak ama şu anda Windows'da deneme yapıyorum. Elimdeki kitaba bakarak basit bir örnek yaptım. Her şey tek tek güzel çalışıyor ancak programı kapamadan dosyaya yazma yaptıktan sonra dosyayı okumaya çalışırsam program çöküyor. Bunun sebebi nedir acaba?

#define _CRT_SECURE_NO_DEPRECATE
#include <stdio.h>

struct objectDatabase
{
	char name[15];
	double area;
	double length;
	double formFactor;
};

int enterChoice(void);
void addNewObject(FILE *);
void getObjectData(FILE *);

int main()
{
	FILE *cfPtr;
	int choice;

	if ((cfPtr = fopen("objects.dat", "a +")) == NULL)
		printf("Couldn't open the file.\n");
	else
	{
		while ((choice = enterChoice()) != 0)
		{
			switch (choice)
			{
			case 1:
				addNewObject(cfPtr);
				break;
			case 2:
				getObjectData(cfPtr);
				break;
			}
		}
		fclose(cfPtr);
	}
	return 0;
}

int enterChoice(void)
{
	int menu;

	printf("\nChoice:\n");
	printf("0: Exit\n");
	printf("1: Add New Object Data\n");
	printf("2: Get an Object's Data\n");

	scanf("%d", &menu);
	return menu;
}

void addNewObject(FILE *wPtr)
{
	struct objectDatabase newObject = { "", 0.0, 0.0, 0.0 };

	printf("Please enter the name of the object: ");
	scanf("%s", newObject.name);
	printf("\nPlease enter the area of the object: ");
	scanf("%lf", &newObject.area);
	printf("\nPlease enter the length of the object: ");
	scanf("%lf", &newObject.length);
	printf("\nPlease enter the form factor of the object: ");
	scanf("%lf", &newObject.formFactor);
	printf("\n");
	
	fprintf(wPtr, "%s %.2f %.2f %.2f\n", newObject.name, newObject.area, newObject.length, newObject.formFactor);
}

void getObjectData(FILE *rPtr)
{
	struct objectDatabase objectData = { "", 0.0, 0.0, 0.0 };

	printf("%-12s%-12s%-12s%-12s\n", "Name", "Area", "Length", "Form Factor");
	fscanf(rPtr, "%s%lf%lf%lf", objectData.name, &objectData.area, &objectData.length, &objectData.formFactor);

	while (!feof(rPtr))
	{
		printf("%-12s%-12.4lf%-12.4lf%-12.4lf\n", objectData.name, objectData.area, objectData.length, objectData.formFactor);
		fscanf(rPtr, "%s%lf%lf%lf", objectData.name, &objectData.area, &objectData.length, &objectData.formFactor);
	}
}

muhittin_kaplan

Dosya ya bilgileri yazdiktan sonra kapatiyormusun ? FOpen yapmissin ama ben close goremedim

vitruvius

fclose main içinde var.

Okuma yapmadan önce rewind(rPtr) ekleyerek dosyanın başına dönmesini sağladım. Sorun çözüldü. Teşekkürler.