[Çözüldü] C++ da birden fazla struct ( yapiyi) dosyaya yazmak , okumak

Başlatan darkbird, 14 Kasım 2014 - 21:31:30

« önceki - sonraki »

0 Üyeler ve 2 Ziyaretçi konuyu incelemekte.

darkbird

selamlar ben emrah daha onceleri java ile programlama mantığını deneyledım,  sonra yakın bir zamanda ismini vermiyim reklam olur. c++ kitabı aldım.  bende internetten dokuman okuyorum. ben "birden fazla!!" değişik isimli struct ( yapıları ) dosyaya yazıp okumak istiyorum. nette çok aradım, internette tek struct yazıp okuma örnek kodu buldum. uzerinde değişiklikler yaptım. birden fazla struct yazıp okumayı başaramadım.

kod aşşagıda yazmaktadır. kod yazarak yardımcı olmasanız bile işleyiş mantıgını anlatan bir yazida yazabilrisiniz. açaba dosyada scruct'in başlangıç ve uzunluguguyla yarattgim bir şablondan faydalanıp okuma yazma mi yapmaliyim, vede tek bir fstream buffer'a butun birden fazla struct'ları yazman gereklimi ayrı ayrimi olmali daha pratik olur mu?

vakit ayırdığınız icin teşekkürler.
not: c++ derleyicim xcode'da i686 gcc 3 ve gcc 4' dür


// dosya ismi main.cpp

#include <iostream>
#include <fstream>
#include <sstream>
#include <algorithm>

using namespace std;

struct WebSites{
char SiteName[100];
int tarih;
int Rank;
}s1,s2,s3,s4;

int main (int argc, char * const argv[]) {
   
    //std::cout << "Hello, World!\n";
strcpy(s1.SiteName,"www.ppp.com");
s1.tarih = 05;
s1.Rank = 0;
strcpy(s2.SiteName,"www.ooo.com");
s2.tarih = 05;
s2.Rank = 111;
strcpy(s3.SiteName,"www.yahoo.com");
s3.tarih = 03;
s3.Rank = 123;
strcpy(s4.SiteName,"www.code.com");
s4.tarih = 11;
s4.Rank = 14;

// dosyyaya yazmak

fstream dosya_file("dosya.dat",ios::out|ios::binary|ios::app);

dosya_file.write(reinterpret_cast<char *>(&s1),sizeof(WebSites));
dosya_file.write(reinterpret_cast<char *>(&s2),sizeof(WebSites));
dosya_file.write(reinterpret_cast<char *>(&s3),sizeof(WebSites));
dosya_file.write(reinterpret_cast<char *>(&s4),sizeof(WebSites));

dosya_file.close();

// dosyadan oku

fstream dosya_file2("dosya.dat",ios::binary|ios::in|ios::ate);
int size = dosya_file2.tellg();
for(int i = 0; i<size/sizeof(WebSites); i++){
WebSites p_Data;
dosya_file2.seekg(i*sizeof(WebSites));// rasgele erisim
dosya_file2.read(reinterpret_cast<char *>(&p_Data),sizeof(WebSites));

cout << p_Data.SiteName<<endl;
cout << "Rank: "<< p_Data.Rank<<endl;
cout << " tarih :" << p_Data.tarih<< endl;
}
dosya_file2.close();

    return 0;
}


-DıLgEş-

#1
Derlediğinde mi hata alıyorsun?
Aşkın; gözü kör, kulağı sağır, dili tutuk, aklı kıttır..! Hayır yani bu halde nasıl herkesi madara ediyor onu çözemedim..

heartsmagic

Alıntı yapılan: darkbird - 14 Kasım 2014 - 21:31:30
... sonra yakın bir zamanda ismini vermiyim reklam olur. c++ kitabı aldım. .

Merhaba.

Bu türde bilgileri reklam saymayız bu forumda, not düşmek istedim.
Hayattan çıkarı olmayanların, ölümden de çıkarı olmayacaktır.
Hayatlarıyla yanlış olanların ölümleriyle doğru olmalarına imkân var mıdır?


Böylece yalan, dünyanın düzenine dönüştürülüyor.

darkbird

Alıntı yapılan: Nurullah_RT - 15 Kasım 2014 - 09:13:05
Derlediğinde mi hata alıyorsun?

hayır derlediğimde hata almiyorum. kod çalışıyor. bir degil misal üç scruct'i dosyayaya yazıp okumak istiyorum.

Amenofis

Farklı türde structları yazmak istiyorsun sanırım. Ama dosyaya binary şeklinde yazarak büyük hata yapmışsın. C++ ta nesnelerin binary standardı olmadığı için bu taşınabilir bir yöntem olmaz.

Dosyayı karakter modda açıp "dosya << siteadi << tarih << rank;" şeklinde yazıp yine aynı sırada okursan sorun çıkmaz. Sırayı bozmadığın sürece istediğin kadar objeyi yazıp okuyabilirsin.

darkbird

Alıntı yapılan: Amenofis - 15 Kasım 2014 - 16:32:13
Farklı türde structları yazmak istiyorsun sanırım. Ama dosyaya binary şeklinde yazarak büyük hata yapmışsın. C++ ta nesnelerin binary standardı olmadığı için bu taşınabilir bir yöntem olmaz.

Dosyayı karakter modda açıp "dosya << siteadi << tarih << rank;" şeklinde yazıp yine aynı sırada okursan sorun çıkmaz. Sırayı bozmadığın sürece istediğin kadar objeyi yazıp okuyabilirsin.

yazma hakkinda bilgi verdigin için teşekkurler işe yariyor. yalniz okuma proplemi var.

#include <iostream>
#include <fstream>
#include <sstream>
#include <algorithm>
#include <string>
#include <iomanip>
#include <stdlib.h>

using namespace std;

struct WebSites{
char SiteName[100];
int tarih;
int Rank;
}s1;

struct adam{
char durum[100];
char pozisyon[100];
}kullanici;

int main (int argc, char * const argv[]) {
    // insert code here...
    std::cout << "Hello, World!\n";
strcpy(s1.SiteName,"www.ppp.com");
s1.tarih = 15;
s1.Rank = 61;

//strcpy(kullanici.durum,"sakin"); // ikinci struct atama
//strcpy(kullanici.pozisyon,"burda");

// yazmak

fstream dosya_file("dosya.dat",ios::out|ios::app);

// sadece s1 yaziliyor
dosya_file << s1.SiteName << s1.tarih << s1.Rank;
dosya_file.close();// dosya kapandı

// okuyor
fstream dosya_file2("dosya.dat",ios::in|ios::ate);

WebSites p_Data;

dosya_file2 >> p_Data.SiteName >>  p_Data.tarih >>  p_Data.Rank; // structa ata

dosya_file2.close();
cout << endl;
cout << "site ismi: " << p_Data.SiteName  << "tarih: " << p_Data.tarih << "rank: " << p_Data.Rank << endl;

    return 0;
}


çıktı böyle oluyor.

site ismi: \344\375tarih: 0rank: -1073743068


degerlerimi okurkenmi  int'e ceviricem nasil yapabilrim. teşekkürler.

Amenofis

Okurken ios::ate eklemişsin, onu kaldır. Birde fstream yerine ifstream ve ofstream kullanırsan daha anlamlı olur. char dizisi yerine std::string te kullanabilirsin ek olarak. Garantili yöntem, taşma riski yok.

struct Adam {
    string durum;
...
}
ofstream yaz_dosya("dosya.dat", ios::app);
...
ifstream oku_dosya("dosya.dat");
...

darkbird

Alıntı yapılan: Amenofis - 16 Kasım 2014 - 23:16:33
Okurken ios::ate eklemişsin, onu kaldır. Birde fstream yerine ifstream ve ofstream kullanırsan daha anlamlı olur. char dizisi yerine std::string te kullanabilirsin ek olarak. Garantili yöntem, taşma riski yok.
adam struct'indaki char, string yapınca bir satiri oldugu gibi okudu diger degerlerle birlikte. misal  site ismi www.emrah.com1561 seklinde oldu.
bende satir satir kayıt ettirdim. satir satır okuttum. bu işe yarıyor  SAĞOLASIN.  ama tek satırdan okutmanın mümkün oldugunu söyleyebilirmisin, bilmek isterim.


using namespace std;

struct WebSites{
std::string SiteName;
int tarih;
int Rank;
}s1;

struct adam{
string durum;
int pozisyon;
}kullanici;

int main (int argc, char * const argv[]) {
   
    // degerler ataniyor
s1.SiteName = "www.emrah.com";
s1.tarih = 15;
s1.Rank = 61;

kullanici.durum = "sakin";
kullanici.pozisyon = 21;

// yazmak
ofstream dosya_file("dosya.dat",ios::app);

// s1 yaziliyor
dosya_file << s1.SiteName << endl;
dosya_file << s1.tarih << endl;
dosya_file << s1.Rank << endl;
//kullanici yaziliyor
dosya_file << kullanici.durum << endl;
dosya_file << kullanici.pozisyon << endl;
dosya_file.close();// dosya kapandı

// okuyor
ifstream dosya_file2("dosya.dat");
// struct klonlaniyor
WebSites p_Data;
adam e_Data;

dosya_file2 >> p_Data.SiteName; // p_data siteismi'dir
dosya_file2 >> p_Data.tarih;
dosya_file2 >> p_Data.Rank;
dosya_file2 >> e_Data.durum; // e_Data adam'dır
dosya_file2 >> e_Data.pozisyon;
//dosya kapaniyor
dosya_file2.close();
cout << endl;
cout << "site ismi: " << p_Data.SiteName  << "tarih: " << p_Data.tarih << "rank: " << p_Data.Rank << "kullanici durum: " << e_Data.durum << "kullanici pozisyon" << e_Data.pozisyon << endl;

    return 0;
}



Amenofis

Onu string ile alakası yok. char ile de yapsan aynısı olacaktı. O problemi atlamışız doğrudur.

endl yerine ' ' şeklinde boşluk karakteri yazsan da olur. C++ ta nesneleri dosyaya yazıp okumanın standartlaşmış bir şekli var. Biraz ileri seviye konular içerebilir ama işi çok kolaylaştırıyor. Ben ilk nesne için bir fonksiyon yazayım. Diğer nesne için de sen yazarsın.

const char bosluk = ' ';    // Boşluk karakterine isim verdik. İyi kodlama alıştırması...
struct WebSites {
    ...
}

ofstream& operator <<(ofstream &out, WebSites &site)
{
    out << site.SiteName << bosluk << site.tarih << bosluk << site.Rank << endl;
    return out;
}
...

Diğer nesne için de benzer fonksiyon yazdıktan sonra;
dosya_file << s1 << kullanici;

şeklinde sadece tek satır ile birden fazla türde nesneyi yazabilirsin. Okumak için de aynı şey mümkün. Sadece ofstream ve << yerine ifstream ve >> olacak.

darkbird

Alıntı yapılan: Amenofis - 17 Kasım 2014 - 16:26:41
Onu string ile alakası yok. char ile de yapsan aynısı olacaktı. O problemi atlamışız doğrudur.

endl yerine ' ' şeklinde boşluk karakteri yazsan da olur. C++ ta nesneleri dosyaya yazıp okumanın standartlaşmış bir şekli var. Biraz ileri seviye konular içerebilir ama işi çok kolaylaştırıyor. Ben ilk nesne için bir fonksiyon yazayım. Diğer nesne için de sen yazarsın.

const char bosluk = ' ';    // Boşluk karakterine isim verdik. İyi kodlama alıştırması...
struct WebSites {
    ...
}

ofstream& operator <<(ofstream &out, WebSites &site)
{
    out << site.SiteName << bosluk << site.tarih << bosluk << site.Rank << endl;
    return out;
}
...

Diğer nesne için de benzer fonksiyon yazdıktan sonra;
dosya_file << s1 << kullanici;

şeklinde sadece tek satır ile birden fazla türde nesneyi yazabilirsin. Okumak için de aynı şey mümkün. Sadece ofstream ve << yerine ifstream ve >> olacak.

ileri seviye ben operator'u kullanmayi bilmiyorum fonksiyon olarakmi gostericez. anlamadigim kisim ofstream dosya_file oluşturuyoruz. bu dosya_file'ı &out 'a nasil bagliyoruz.!!  ofstream& operator<< (ofstream &out,WebSites &site) 'u baska bir class in icine koydum. dogrumu yaptim bilmiyorum. main icindeykende hata veriyor. nerde kullanicam. aşagidaki kodda iki tane hata aliyorum


const char bosluk = ' ';

struct WebSites{
string SiteName;
int tarih;
int Rank;
}s1;

struct adam{
string durum;
int pozisyon;
}kullanici;


class yap{
public:

friend ofstream& operator<< (ofstream &out,WebSites &site){

out << site.SiteName<<bosluk<<site.tarih<<bosluk<<site.Rank<<endl;
return out;
}
};
int main (int argc, char * const argv[]) {
   
   
s1.SiteName = "www.emrah.com";
s1.tarih = 15;
s1.Rank = 61;

kullanici.durum = "sakin";
kullanici.pozisyon = 21;

ofstream dosya_file("dosya.dat",ios::app);


dosya_file <<site; //hata veriyor

dosya_file.close();


ifstream dosya_file2("dosya.dat");


WebSites p_Data;
adam e_Data;

dosya_file2 >> p_Data >> e_Data; //hata veriyor

dosya_file2.close();
cout << endl;
cout << "site ismi: " << p_Data.SiteName  << "tarih: " << p_Data.tarih << "rank: " << p_Data.Rank << "kullanici durum: " << e_Data.durum << "kullanici pozisyon" << e_Data.pozisyon << endl;

    return 0;
}



Amenofis

Hayır class içine değil, normal fonksiyon olacak. Ben WebSite struct un için tam kod vereyim. Diğer struct ların için de aynı şekilde yaparsın. Bazı değişkenleri yeniden isimlendirdim ve s1 nesnesini de global yerine yerel yaptım. Böylesi daha iyi.

#include <iostream>
#include <fstream>
#include <string>
using namespace std;

const char bosluk = ' ';
struct WebSite {
    string site_adi;
    int tarih;
    int rank;
};

ofstream& operator <<(ofstream &yazar, WebSite &site)
{
    yazar << site.site_adi << bosluk << site.tarih << bosluk << site.rank << endl;
    return yazar;
}

ifstream& operator >>(ifstream &okur, WebSite &site)
{
    okur >> site.site_adi >> site.tarih >> site.rank;
    return okur;
}

int main (int argc, char *argv[])
{    
    WebSite s1 = {"www.emrah.com", 15, 61};
    ofstream yaz_dosya("dosya.txt");
    // s1 yaziliyor
    yaz_dosya << s1;
    yaz_dosya.close();// dosya kapandı
        
    // okuyor
    ifstream oku_dosya("dosya.txt");
    
    // struct klonlaniyor
    WebSite p_Data;
    oku_dosya >> p_Data;
   
    //dosya kapaniyor
    oku_dosya.close();
    cout << "\nsite ismi: " << p_Data.site_adi
    << "\ntarih: " << p_Data.tarih
    << "\nrank: " << p_Data.rank << endl;
    
    return 0;
}


heartsmagic

Bu forumda programlama konuşuldukça nedense mutlu oluyorum :) Normalde forumun böyle bir amacı yok, çok daha güzel mecralar var ancak görüyoruz ki ihtiyaç oluyor. Memnunum kendi adıma bu durumdan, orası ayrı bir konu.
Hayattan çıkarı olmayanların, ölümden de çıkarı olmayacaktır.
Hayatlarıyla yanlış olanların ölümleriyle doğru olmalarına imkân var mıdır?


Böylece yalan, dünyanın düzenine dönüştürülüyor.

-DıLgEş-

Alıntı yapılan: heartsmagic - 18 Kasım 2014 - 00:20:59
Bu forumda programlama konuşuldukça nedense mutlu oluyorum :) Normalde forumun böyle bir amacı yok, çok daha güzel mecralar var ancak görüyoruz ki ihtiyaç oluyor. Memnunum kendi adıma bu durumdan, orası ayrı bir konu.

Aslında forumda programlama dili dersleri diye bir bölüm açarsanız ben C,C++ ve Bash programlama diline ait dersler yazabilirim. Açarsanız belki forumda yeni başlayanlara yardım edebiliriz...
Aşkın; gözü kör, kulağı sağır, dili tutuk, aklı kıttır..! Hayır yani bu halde nasıl herkesi madara ediyor onu çözemedim..

darkbird

Alıntı yapılan: Amenofis - 17 Kasım 2014 - 21:42:21
Hayır class içine değil, normal fonksiyon olacak. Ben WebSite struct un için tam kod vereyim. Diğer struct ların için de aynı şekilde yaparsın. Bazı değişkenleri yeniden isimlendirdim ve s1 nesnesini de global yerine yerel yaptım. Böylesi daha iyi.

tamam bu kod işime yarar. yalnız struct'a degerine boşluk karakter barındıran bir yazı girilemiyor onun yerine _ karakteri koyula bilir.

sanırım özel bir karakter kullanarak misal , virgül ile degerleri okutma yazma kodu yazmak gerekir ki bu su anki koddan daha farklı bir kod olur sanirim. onun icin  .cvs veri tabanı formatinda calismak gerekiyor onun icinde c++'da cvs veri tabani kütüphaneleri var( ben hazır kütüphaneyi anlayamadim yardim dokumani yoktu) openoffice'de cvs veri tabanı ürete biliyor vs..

@Amenofis yazmami istedigin kod bu degilmi? Başkalari bu kodu örnek almak isterse yanılmasinlar diye ekliyorum: Teşekkürler.


using namespace std;

const char bosluk = ' ';
struct WebSite {
    string site_adi;
    int tarih;
    int rank;
};

struct Adam{
string durum;
int pozisyon;
};

ofstream& operator <<(ofstream &yazar, WebSite &site)
{
    yazar << site.site_adi << bosluk << site.tarih << bosluk << site.rank << endl;
    return yazar;
}

ifstream& operator >>(ifstream &okur, WebSite &site)
{
    okur >> site.site_adi >> site.tarih >> site.rank;
    return okur;
}

ofstream& operator <<(ofstream &yazar, Adam &adam)
{
    yazar << adam.durum << bosluk << adam.pozisyon << endl;
    return yazar;
}

ifstream& operator >>(ifstream &okur, Adam &adam)
{
    okur >> adam.durum >> adam.pozisyon;
    return okur;
}

int main (int argc, char *argv[])
{   
    WebSite s1 = {"pink_floydun_yeni_albumu_cikti", 15, 61};
Adam a1 = {"www.adam.com", 34};
    ofstream yaz_dosya("dosya.txt");
    // s1 yaziliyor
    yaz_dosya << s1 <<a1;
    yaz_dosya.close();// dosya kapandı       
// okuyor
ifstream oku_dosya("dosya.txt");

// struct klonlaniyor
WebSite p_Data;
Adam a_Data;
oku_dosya >> p_Data >> a_Data;

//dosya kapaniyor
oku_dosya.close();
cout << "\nsite ismi: " << p_Data.site_adi
<< "\ntarih: " << p_Data.tarih
<< "\nrank: " << p_Data.rank
<< "\ndurum: "<< a_Data.durum
<< "\npozisyon: " <<a_Data.pozisyon<< endl;
return 0;
}



Reverser

Yapıyı dosya'ya yazan bir örnek paylaşayım bende C için örnek bulunsun.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAKS_KAYIT_UZUNLUGU 256


typedef struct
{
  char ad[20];
  char soyad[20];
  int yas;
  int boy;
} kayit;

//prototip 
char* diz(const kayit* p);


int main(void)
{
  FILE* file = fopen("cikti.txt", "w");
  if (!file) {
    fprintf(stderr, "Dosya olusturulamadi\n");
    return 1;
  }
     
  kayit kisi = {"Ahmet", "Bora", 35, 190};
  char* kayit_verisi = diz(&kisi);
  fprintf(file, "%s\n", kayit_verisi);
   
  fclose(file);
  free(kayit_verisi);
  return 0;
}

char* diz(const kayit* p)
{
  char* cikti = malloc(MAKS_KAYIT_UZUNLUGU * sizeof(*cikti));
  if (!cikti) {
    fprintf(stderr, "Hafiza ayrilamadi\n");
  } else {
    memset(cikti, '\0', MAKS_KAYIT_UZUNLUGU);
    sprintf(cikti, "%s %s %d %d", p->ad, p->soyad, p->yas, p->boy);
  }
  return cikti;
}

XFCE ROCKS !
Powered by Thunar & XFWM4



if

Alıntı yapılan: Nurullah_RT - 18 Kasım 2014 - 09:24:35
Aslında forumda programlama dili dersleri diye bir bölüm açarsanız ben C,C++ ve Bash programlama diline ait dersler yazabilirim. Açarsanız belki forumda yeni başlayanlara yardım edebiliriz...

Yeni bölüm açmaya gerek yok bence. İlgili programlama dilinin bölümünde ne anlatılacaksa yeni konu açılıp anlatılabilir.

Amenofis

Alıntı yapılan: darkbird - 18 Kasım 2014 - 18:40:33
tamam bu kod işime yarar. yalnız struct'a degerine boşluk karakter barındıran bir yazı girilemiyor onun yerine _ karakteri koyula bilir.


Stringler elbette boşluk içerebilir sıkıntı yok. Bunun için stringi ayrı satıra yazıp (sonuna boşluk yerine endl koyarak) okurken de std::getline ile okuyacaksın. Fakat bunun araştırmasını sana bırakıyorum. Kolay gelsin.

travego0403

Alıntı yapılan: heartsmagic - 18 Kasım 2014 - 00:20:59
Bu forumda programlama konuşuldukça nedense mutlu oluyorum :) Normalde forumun böyle bir amacı yok, çok daha güzel mecralar var ancak görüyoruz ki ihtiyaç oluyor. Memnunum kendi adıma bu durumdan, orası ayrı bir konu.

Programlama bölümümüz gurur duyulacak kadar gelişiyor. :)
"Matematik bir dildir ve bu dilde şairlere fizikçi denir." Richard Feynman

heartsmagic

Hayattan çıkarı olmayanların, ölümden de çıkarı olmayacaktır.
Hayatlarıyla yanlış olanların ölümleriyle doğru olmalarına imkân var mıdır?


Böylece yalan, dünyanın düzenine dönüştürülüyor.

darkbird

bu forumde topic acmadan once aklimda işletim sisteminin başlangicina bir uygulama yazıp calistiginda dosyasindan tarihleri kontrol edip o zamanda hatirlatmak amaciyla web sitesi acan bir program yapmak istemistim. yaptim. yalniz execvp komutuna parametre olarak dosyadan aldigim struct degerini ( site ismi) ni ekliyemiyorum.

dosya.txt dosyanin iceriği örnek olarak " internet linki gün ay yıl" seklinde olmalı

https://forum.ubuntu-tr.net 20 11 2014
https://www.wikipedia.org 21 11 2014
https://www.wikipedia.org 22 11 2015
http://www.facebook.com 22 11 2014
https://forum.ubuntu-tr.net 21 11 2014

dosya sonunda yeni boş satir olmayacak dosyanin sonu yazilmis satir sonunda *olacak

aslinda bu programi yazmayi biraktim.  bu sitedeki yardim severlerede tesekkur ederim.
uygulamanin kodu ise söyle. isterseniz daha kararlı hale getire bilrisiniz. d_sablon.SiteName  struct'ini char olarak nasil execvp' ye ekliye bilecegimi bilmiyorum. baya bi ugrastim

#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <iomanip>
#include <stdlib.h>
#include <cstring>
#include <cstdlib>
#include <ctime>
#include <time.h>

using namespace std;

const char bosluk = ' ';
typedef  struct WebSites{
string SiteName;
int gun;
int ay;
int yil;
}sablon;

int i; // donen deger

ifstream& operator >>(ifstream &okur, WebSites &site)
{
    okur >> site.SiteName >> site.gun >> site.ay >> site.yil;
    return okur;
}
int yil;
int ay;
int gun;
time_t simdi =time(0);
struct tm *ltm = localtime(&simdi);

int main (int argc, char * const argv[]) {

//tarih ata
yil = 1900 + ltm->tm_year;
ay = 1 + ltm->tm_mon;
gun =ltm->tm_mday;

// doya oku
ifstream oku_dosya("dosya.txt");
i=0;
bool deger;
do{
sablon d_sablon[i]; // sablonu klonla
oku_dosya >>d_sablon[i];
// tarih kontrol et
if(yil==(d_sablon[i].yil)){
if(ay==(d_sablon[i].ay)){
if(gun==(d_sablon[i].gun)){
//cout << "dosyadan: " << d_sablon[i].SiteName << " gun: " << d_sablon[i].gun << " ay: " << d_sablon[i].ay << " yil: " << d_sablon[i].yil << endl;
cout << "site ismi: " << d_sablon[i].SiteName << endl; //bu gunku link
// burda parametre olarak d_sablon[i].SiteName 'i execvp() 'ye eklemem gerekiyor
/*ornek olarak bunu denedim: char* komut[] = {"open","/Applications/Safari.app",d_sablon[i].SiteName,NULL};
*/
char* komut[] = {"open","/Applications/Safari.app","http://www.facebook.com",NULL};
// not mac osxde teminal komutu olarak open' da kullaniliyor.
                        //tabi onun yerine exec veya sh'de kullanilabilir
execvp( komut[ 0 ], komut ); // buraya parametre olarak d_sablon[i].sitename' ekleyemedim.
}
}
}
i++;
deger =(!oku_dosya.eof());
}while(deger);


oku_dosya.close(); ///dosya kapat
    return 0;
}