SORU
8 NİSAN 2010, PERŞEMBE


Tüm ASCII C std dosyası okunamıyor::string

Belleğe tüm dosyayı okumak ve bir C std::string yerleştirmeniz gerekiyor.

Eğer ** 5, okumaya olsam cevap çok basit olurdu:

std::ifstream t;
int length;
t.open("file.txt");      // open input file
t.seekg(0, std::ios::end);    // go to the end
length = t.tellg();           // report location (this is the length)
t.seekg(0, std::ios::beg);    // go back to the beginning
buffer = new char[length];    // allocate memory for a buffer of appropriate dimension
t.read(buffer, length);       // read the whole file into the buffer
t.close();                    // close file handle

// ... Do stuff with buffer here ...

Şimdi, aynı şeyi yapmak istiyorum, ama char[] yerine std::string kullanarak. Döngüler önlemek için istiyorum, yani benyokistiyorum:

std::ifstream t;
t.open("file.txt");
std::string buffer;
std::string line;
while(t){
std::getline(t, line);
// ... Append line to buffer and go on
}
t.close()

Herhangi bir fikir?

CEVAP
8 NİSAN 2010, PERŞEMBE


Birkaç seçenek vardır. Bir go-arasında: bir olarak bir stringstream kullanmak gibi

std::ifstream t("file.txt");
std::stringstream buffer;
buffer << t.rdbuf();

Şimdi içindekiler "file.txt" buffer.str() bir dize olarak kullanılabilir.

Başka bir ihtimal kesinlikle ben de sevmiyorum rağmen) orijinal çok daha fazla gibi

std::ifstream t("file.txt");
t.seekg(0, std::ios::end);
size_t size = t.tellg();
std::string buffer(size, ' ');
t.seekg(0);
t.read(&buffer[0], size); 

Resmi olarak bu değil gerekli altında çalışmak için C veya 98 03 standart (string değil gerekli verileri saklamak bitişik) ama aslında işleri ile bilinen tüm uygulamaları ve C 11 gerektirir bitişik depolama, garanti, iş C 11.

İlk olarak, uzun ve okuması zor oluyor çünkü. ikincisi sevmiyorum neden: İkincisi, çünkü bunu gerektiren başlatmak içeriğini string ile veri düşünmüyorsun, o zaman hemen yazma veri (gerçi zaman başlatmak için genellikle önemsiz karşılaştırıldığında okuma, çok olsa da fark etmez herhalde, öyle hissediyorum sadece yanlış). Üçüncü olarak, bir metin dosyası, konum X dosyası yok illa demek zorundasın okuma X karakter ulaştığınızda bu nokta değil gerekli hesaba şeyler gibi satır sonu çevirileri.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Eddie Bravo

    Eddie Bravo

    17 EKİM 2006
  • Samvith V Rao

    Samvith V Ra

    20 EKİM 2006
  • TWiT Netcast Network

    TWiT Netcast

    27 EKİM 2005