2011-01-11 2 views
0

파일 읽기, 업데이트 및 삭제에 대한 요구 사항이 있습니다. 나는 이것을위한 수업을 쓰고 싶다. 업데이트가 가능 C에서 파일에 한 줄을 삭제 ++와 우리가 이것을 달성 할 수있는 방법 가능한 경우 휴대해야하는 동안 예를 들어 C++의 파일 관리

class FileManagement { 
private: 
    fstream myFile; 

public: 
    void read(); 
    void update(); 
    void delete(); 

}; 

내 질문입니다. 위의 옵션을 사용할 수없는 경우 위의 사항을 달성 할 수있는 다른 질문이 있습니다.

C++에서는 휴대용 방식으로 파일을 삭제할 수 있습니다.

감사합니다.

+1

예제 코드가 올바르지 않습니다. C++. delete는 language 키워드이며 멤버 함수 이름으로 사용할 수 없습니다. –

답변

2

혼란스러운 방식으로 한 번에 두 가지 질문을하는 것처럼 보입니다.

  • 파일을 삭제 에, stdio.h에있는 remove 기능을 사용합니다.
  • 에 파일의 한 줄을 지우려면 전체 파일을 읽고 줄을 제거하고 다시 작성해야합니다. 이를위한 라이브러리 루틴은 없습니다. 표준 "안전한"기술은 전체 파일을 읽고, 동일한 파일을 파일로 다시 쓰고, 새 파일 fsync을 닫은 다음 닫고 rename 이전 이름으로 새 파일. 동시 판독기 또는 작동 중에 컴퓨터가 손상되는 것을 신경 쓰지 않는다면 이전 파일 읽기/쓰기를 열어 내용을 메모리로 읽어 들이고 rewind 파일 핸들을 직접 다시 작성하십시오. 객체 지향하고 파일 이름 조작 및 파일을 모두 처리 할 수있는 더 높은 수준의 C를 찾고 있다면
1

posix 표준을보고 파일 작업 (예 : fopen())을 찾아야합니다. 플랫폼은 POSIX를 지원, 또는 표준에서 분기하지 않는 경우, 당신은 가능성이 POSIX 준수 진술을 받아 들일 것입니다

 
#ifdef NONPOSIXOS1 // really, this should be a good identifier of hte OS 
    // write code to handle the special case 
#else 
    // write code to handle the posix compliant case 
#endif 
+1

표준 C/C++ 함수로 그렇게 할 수 있습니다. –

0

대부분의 시스템에 필요합니다. 추상 기본 클래스를 정의하고 필요한 플랫폼 별 지침을 사용하는 다른 구체적인 구현을 만들 수 있습니다. 올바른 구체적인 클래스를 인스턴스화하는 def를 가질 수 있습니다.

+0

감사하지만 내 질문에 우리가 C에서 파일의 한 줄을 삭제할 수 있습니다 + + – venkysmarty

+0

네, 당신이 데이터를 조작하고 다시 쓰는 스트림을 사용하여 데이터를 모두 읽어보십시오. 그것은 가장 간단한 방법입니다. – rerun

7

나는 그것의 설명을 읽어 Boost Filesystem.

을 사용하는 것이 좋습니다. "부스트 파일 시스템 라이브러리 조회 및 경로, 파일 및 디렉토리를 조작하는 휴대용 기능을 제공한다"

+0

boost :: filesystem은 파일 읽기/쓰기를 다루지 않습니다. – chris

+1

boost :: filesystem은 파일 및 디렉토리 경로를 조작하는 좋은 방법입니다. 이는 플랫폼에 독립적 인 방식으로 문자 인코딩을 처리하기 때문입니다. 실제 데이터 입출력의 경우 C++ 방식은 iostream 함수를 사용하는 것이지만 stdio의 C 함수는 성능을 향상시킬 수 있습니다. – kgriffs

+0

@chris 확실한가 – blue

0

++ 라이브러리는 I/O, POCO 괜찮은 선택 :

http://pocoproject.org

ACE I/O 지원이 많이 포함 된 오래된 전투 테스트 프레임 워크입니다.마지막으로, QT가있다,

http://www.cs.wustl.edu/~schmidt/ACE-overview.html

을 그리고 : 일반적으로는 우수한 CORBA 지원의 사용,하지만 많은 거기에있다. 크로스 플랫폼 UI 라이브러리로 일반적으로 알려져있는 QT는 실제로 파일 관리 및 I/O를 비롯한 여러 가지 유용한 기능을 포함하고 있으며 필요하지 않은 경우 UI 항목에 링크 할 필요조차 없습니다.

http://qt.nokia.com/

오히려 다른 프레임 워크에 가져 오지 싶다면, 당신의 자신의 파일을 압연 추천 할 것입니다 I/부스트 : : 파일 시스템 및 중 표준 iostream 또는 표준 입출력 함수를 사용하여 O 클래스. 위의 프레임 워크의 인터페이스를 참조로 사용할 수 있지만 Boost에서 설명한대로 Modern C++ Design으로 설명 된 것처럼 최신 C++ 디자인을 익히고 싶을 수도 있습니다.