2013-07-10 2 views
1

QByteArray을 파일의 특정 위치에 삽입 할 수 있습니까? 예를 들어, 이미 100KB의 데이터가있는 파일을 가지고 있다면, 예를 들어 위치 20에 QByteArray을 삽입 할 수 있습니까? 그 다음에 0KB에서 20KB까지의 데이터를 구성 할 파일을 작성한 후 QByteArray을 작성한 후 20KB에서 100KB까지의 데이터를 작성합니다.Qt : QByteArray를 특정 위치의 파일에 삽입하십시오.

+1

파일 시스템 API에서는 지원되지 않습니다. 나머지 파일을 읽고 수동으로 새 위치로 옮겨야합니다. –

답변

3

단일 기능을 수행 할 수는 없지만 몇 줄의 코드만으로 수행 할 수 있습니다.

data은 파일에 삽입 할 데이터가있는 QByteArray이라고 가정합니다.

QFile file("myFile"); 
file.open(QIODevice::ReadWrite); 
QByteArray fileData(file.readAll()); 
fileData.insert(20, data); // Insert at position 20, can be changed to whatever you need. 
file.seek(0); 
file.write(fileData); 
file.close(); 
1

파일 크기가 작은 남아 있지만 응용 프로그램이 파일에 기록 유지하고 매우 커지면, 당신은 메모리에 전체 파일을 읽는다면 내가 다니엘의 대답에 동의합니다.

이 경우 두 번째 파일을 만들고 처음부터 삽입 위치까지 바이트를 복사 할 수 있습니다. 그런 다음 첫 번째 파일의 나머지 데이터를 복사하기 전에 새 바이트를 파일에 씁니다. 따라서 관련된 단계는 다음과 같습니다. -

Open file1 for read 
Open file2 for write 
Copy file 1 to file2 until insertion point 
Write new bytes to file2 
Copy remaining bytes from file1 to file2 
Close file handles 
Delete file1 
Rename file2 to file1's name. 
+0

이해가 안되네요. '파일 1에서 파일 2로 나머지 바이트 복사'부분도 파일을 메모리에 복사하지 않습니까? – Phlucious

+1

네,하지만 한 번에 메모리에있는 전체 파일을 정렬하는 대신 2 개의 파일을 사용하여 청크로 복사 할 수 있습니다. 미안하지만 분명하지 않다. – TheDarkKnight

+0

알기. 명확히 해 주셔서 감사합니다. – Phlucious