2009-05-06 6 views
1

ATM을 시뮬레이트하는 응용 프로그램을 만들고 있습니다. 내 거래를 하드 디스크에 저장하는 데 약간의 문제가있었습니다. A) DB 또는 텍스트 파일로 저장해야합니까? B) STL C++에서 DB 또는 txt 형식을 사용하여 디스크에 저장하는 방법은 무엇입니까? (필자는 타사 파일을 사용하고 싶지 않습니다. 파티 도서관이지만 필요하다면). 그것은 가장 널리 분산 데이터베이스가에 있기 때문에파일을 C++로 디스크에 저장하는 방법은 무엇입니까?

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

int main() { 
    ofstream myfile; 
    myfile.open ("example.txt"); 
    myfile << "Writing this to a file.\n"; 
    myfile.close(); 
    return 0; 
} 

, 당신은 응용 프로그램에 SQLite는 연결에보고 할 수 있습니다 :이 같은

답변

6

뭔가 :-) 사전에

감사합니다 세계 : http://www.sqlite.org/capi3.html

견고하며, 많은 휴대 기기 및 Thunderbird 및 Firefox에서 사용됩니다. 당신이 가장 잘 판단 할 수 있습니다 -

+1

당신은 매개 변수로 파일 이름을 전달할 수있는 DB..other 현명한 파일이 더 사용하는 것이 좋습니다 ctor 및 close() 호출은 불필요합니다. – dirkgently

+0

파일을 닫지 마십시오. 반환하기 전에 벡터의 크기를 0으로 조정하지 않겠습니까? – MighMoS

+1

@MighMoS : ofstream 개체가 가까운 시간에 파괴되지 않으면 깨끗하게 정리할 수 있습니까? 필자는 항상 "파일을 다 처리 한 곳"이라고 명시 적으로 말한 후 파일을 닫는 습관을 가졌습니다. 아마도 메모리를 올바르게 관리하지 못하고 파일을 남긴 일부 오래된 언어의 습관 일 것입니다 열다. – Andy

1

A)는 내가 사용/응용 프로그램에 따라 다릅니다

가하는 DB 또는 텍스트 파일로 저장해야합니다. 내가 정말 타사 라이브러리를 사용하지 않으려는하지만) 필요한 경우 것이다 (++ STL의 C에서 DB 또는 TXT 형식을 사용하여 디스크에 저장 얼마나

B).

STL에는 데이터베이스 드라이버가 제공되지 않습니다. 그것은 당신이 출력 스트림을 만들고 디스크에 파일로 데이터를 저장할 수 있습니다. DB 파일을 작성하려면 DB의 내부 형식을 알고 이진 파일을 작성해야합니다.

1

텍스트 파일은 쉽습니다. - <fstream>에는 ofstream이 필요한 클래스가 있습니다. 귀하의 트랜잭션 클래스에 대해 연산자 < <을 재정의하십시오 (트랜잭션 클래스를 사용하고 있습니까?). 그러면 cout에 쓰는 것처럼 ofstream에 쓰십시오.

+0

수업을 사용하고 있습니다. 좋은 추측 ;-) – Kredns

0

C++의 경우 fstream을 살펴볼 수 있습니다.

외부 (하지만 아주 표준적인) 라이브러리를 사용할 수 있다면 부스트의 serialization이 도움이 될 수 있습니다. 특히 STL 컨테이너의 내용을 덤프하려는 경우 당신의 질문에서).

외부 라이브러리를 구입할 여력이 없더라도 직렬화의 API가 어떻게 디자인되어 있는지 살펴 보는 것이 좋습니다.

1

C++을 처음 접하는 사람이라면 트랜잭션을 텍스트 파일에 로깅하는 것이 좋습니다. C++에서이 작업을 수행하는 가장 쉬운 방법은 그래서 같은 ofstream을 사용하는 것입니다

물론
#include <fstream> 

void write_transaction(ofstream& file, transaction t) 
{ 
    file << t.somedata; 
} 

int main(int argc, char** argv) 
{ 
    ofstream file; 
    file.open("transactions.txt"); 
    transaction t; 
    t.data = "Something"; 
    write_transaction(file, t); 
    file.close(); 
    return 0; 
} 

은 트랜잭션이 모든 트랜잭션 데이터를 포함하고 아마 배열에서 개최 될 무언가로 정의된다. write_transaction은 모든 중요한 데이터를 기록합니다.

3

이 데이터베이스는 트랜잭션 당 파일 하나에 하나의 행을 쓰는 것으로 보입니다.C++ 스트리밍 클래스에 대한 유용한 참조는 여기 http://www.cppreference.com/wiki/io/start에서 찾을 수 있습니다. C++에 대한 일반적인 참조 정보도 제공합니다.

+0

좋은 웹 사이트. 감사! – Kredns

0

주로 프로젝트의 puropose에 달려 있다고 생각합니다. 그것은 심각한 무언가가 있다면,

실제로 난 그냥 파일 기반 DB를 사용하는 시간이 ...