2017-03-16 3 views
0

나는 이것을 잠시 동안 작동 시키려고 노력해 왔습니다.텍스트 파일 읽기 손실 된 포맷 읽기 대 속도 느림

텍스트 파일 읽기. 파일을로드하는 시간을이 코드를 사용하여

파일을로드하는 형식이의 getline으로 대체됩니다이 코드 ...하지만 시간을 사용하여 단순히 너무 깁니다 ...

std::string line = ""; 
    std::string file = ""; 
    std::ifstream filepath(path); 

    if (filepath.is_open()) 
    { 
     while (std::getline (filepath,line)) 
     {     
     file = file + line + "\r\n"; 
     } 

     filepath.close(); 
    } 

은 약 10 배입니다 더 빨리,하지만 서식 손실 :

 std::ifstream in(path); 
     std::stringstream stream; 

     stream << in.rdbuf(); 

     std::string file(stream.str()); 

는 첫 번째의 서식과 두 번째 방법의 속도를 얻을 수 있나요 ...? 또는 더 빠른 속도와 포맷 변경이없는 빠른 속도?

루프의 각 getline에서 첫 번째 예제에서 동일한 문자열을로드하지 않으려 고 생각했지만 초기 시도는 도움이되지 않았습니다.

+0

당신이 C++ 빌더를 사용하는 당신이'제공 FileOpen/탐색/FILEREAD/FILEWRITE/FileClose'을 사용할 수 있습니다 변경없이 전체 텍스트 파일을 메모리에로드 할 수 있습니다 ... fstream은 느리고 제어 코드도 처리합니다 (즉, 내용이 변경되는 이유입니다). 텍스트 파일에 빠르게 액세스하려면 Memo1이 VCL TMemo 객체 인 경우 (양식에 추가해야하는 경우)'Memo1-> Lines-> LoadFromFile ("file.txt")'를 사용할 수도 있습니다. 눈에 띄지 않아도됩니다. – Spektre

답변

0

다시 확인한 후에, 이것이 무엇이라고 불리 웠는지는 모르지만이 문자열 최적화는 지연 및 서식을 처리했습니다 ... 휴!

사람이 더 빨리 내가 ​​방법을 배우고 싶어요 만드는 방법을 알고 있다면 ...

std::string line = ""; 
    std::string file = ""; 
    std::string tmp_str = ""; 
    std::ifstream filepath(path); 
    unsigned int c = 0; 

    if (filepath.is_open()) 
    { 
     while (std::getline (filepath,line)) 
     { 
      tmp_str = tmp_str + line + "\r\n"; 
      c++; 
      if (c > 100) 
      { 
       file = file + tmp_str; 
       tmp_str = ""; 
       c = 0; 
      } 
     } 

     if (c != 0) 
     { 
      file = file + tmp_str; 
     } 

     filepath.close();