2014-04-18 2 views
2

LAN 네트워크를 통해 전송해야하는 QFile이 있습니다. 이를 위해, 나는 수행하여 QByteArrayQFile 변환 :QFile to QByteArray 저장 파일 이름

//! [Inside a QTcpSocket class] 

// Get the file name using a QFileDialog 
QFile file(QFileDialog::getOpenFileName(NULL, tr("Upload a file"))); 

// If the selected file is valid, continue with the upload 
if (!file.fileName().isEmpty) { 
    // Read the file and transform the output to a QByteArray 
    QByteArray ba = file.readAll(); 

    // Send the QByteArray 
    write(ba); 
} 

내가 그것을받을 때, 나는 사용하여 쉽게 변환 할 수 있습니다 : 그러나

void saveFile(QByteArray ba) { 
    // Ask the user where he/she wants to save the file 
    QFile file(QFileDialog::getSaveFileName(NULL, tr("Save file"))); 

    // Check that the path is valid 
    if (!file.fileName().isEmpty()) { 
     // Write contents of ba in file 
     file.write(ba); 
     // Close the file 
     file.close(); 
    } 
} 

, 내가 알고 싶습니다 파일 이름 (예 : Document.docx) 또는 사용자가 정확히 어떤 파일 형식을 받았는지 알지 못하도록 확장명을 알고 있어야합니다.

파일을 업로드 할 때 수신기 사용자에게 파일을 저장하라는 메시지가 표시되는 것이 가장 이상적입니다. 예를 들어 :

  1. 보낸 사람은 그/그녀가 Document1.docx 수신기의 결정을 바탕으로
  2. , Document1.docx는 수신기의 워크 스테이션에 저장됩니다 저장하고자하는 경우 Document1.docx
  3. 수신기는 메시지가 표시됩니다 보냅니다.

그래서, 내 질문은 : QFileQByteArray로 변환하고 (다른 컴퓨터에서) 다시 전환 할 때의 이름과 QFile의 확장을 알 수있는 방법이 있습니까?

답변

0

QFile::readAll()을 사용하여 파일의 원시 바이트를 읽었을뿐입니다.

Q : 이 QByteArray로 변형되었을 때 QFile의 이름과 확장명을 알 수있는 방법이 있습니까?

아니요. 파일 이름과 확장명이 파일의 바이트 수에 반드시 삽입되지는 않습니다. 파일 형식에 따라 다릅니다. 예를 들어, 특정 확장자로 사용자 정의 파일을 만들고 그 이름과 확장자를 바이트 구걸에 넣을 수 있습니다.

파일의 원시 바이트를 보내기 전에 수동으로 파일의 이름과 확장명을 보낼 수 있습니다. 그 전에 파일의 이름과 확장자의 길이와 바이트 수를 보낼 수 있습니다. 이렇게하면 이름, 확장자 및 원시 바이트와 관련된 바이트 수를 알 수 있습니다.

+0

고맙습니다! 필자는 내용이있는 것과 파일 정보가있는 두 개의 바이트 배열을 만들어서이 문제를 해결했습니다. 두 개의 QByteArrays를 허용하도록 saveFile 함수를 변경했습니다. –

0

귀하의 답변은 특히 아니오입니다. 특정 파일에는 데이터의 시작 부분에 소위 마술 번호 (또는 서명)가 포함되어 있지만이 서명은 특정 파일 형식에 대해 고유해야합니다.

그러나 파일 내용과 별도로 파일 이름 문자열과 확장 문자열을 보낼 수 있기 때문에 문제는 심각하지 않습니다.