QByteArray
을 파일의 특정 위치에 삽입 할 수 있습니까? 예를 들어, 이미 100KB의 데이터가있는 파일을 가지고 있다면, 예를 들어 위치 20에 QByteArray
을 삽입 할 수 있습니까? 그 다음에 0KB에서 20KB까지의 데이터를 구성 할 파일을 작성한 후 QByteArray
을 작성한 후 20KB에서 100KB까지의 데이터를 작성합니다.Qt : QByteArray를 특정 위치의 파일에 삽입하십시오.
답변
단일 기능을 수행 할 수는 없지만 몇 줄의 코드만으로 수행 할 수 있습니다.
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();
파일 크기가 작은 남아 있지만 응용 프로그램이 파일에 기록 유지하고 매우 커지면, 당신은 메모리에 전체 파일을 읽는다면 내가 다니엘의 대답에 동의합니다.
이 경우 두 번째 파일을 만들고 처음부터 삽입 위치까지 바이트를 복사 할 수 있습니다. 그런 다음 첫 번째 파일의 나머지 데이터를 복사하기 전에 새 바이트를 파일에 씁니다. 따라서 관련된 단계는 다음과 같습니다. -
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.
이해가 안되네요. '파일 1에서 파일 2로 나머지 바이트 복사'부분도 파일을 메모리에 복사하지 않습니까? – Phlucious
네,하지만 한 번에 메모리에있는 전체 파일을 정렬하는 대신 2 개의 파일을 사용하여 청크로 복사 할 수 있습니다. 미안하지만 분명하지 않다. – TheDarkKnight
알기. 명확히 해 주셔서 감사합니다. – Phlucious
파일 시스템 API에서는 지원되지 않습니다. 나머지 파일을 읽고 수동으로 새 위치로 옮겨야합니다. –