2011-08-02 3 views
2

Windows에서 공유 폴더를 사용해야하는 Qt 4.7.4에서 응용 프로그램을 만들고 싶습니다.qt windows share

QDir (hostName)을 사용할 수 있지만 문제가 있음을 발견했습니다. 사용되는 대역폭을 제어 할 수 없습니다. 네트워크의 호스트에 액세스 할 때 최대 전송률을 설정할 수 있기를 바랍니다.

응용 프로그램에 대한 추가 정보 : 네트워크에있는 모든 호스트 (이름이 파일에서 제공되는 사람)에서 동일한 내용을 원하는 폴더가 컴퓨터에 있습니다. 예를 들어, 해당 폴더에 새 파일을 추가하고 응용 프로그램을 실행하면, 지정된 최대 대역폭을 가진 호스트에서 파일 복사가 시작됩니다.

도움을 주셔서 감사합니다.

답변

1

대역폭이 QoS 나 방화벽과 같은 운영 체제 드라이버 나 서비스로 관리된다고 가정합니다. QDir은 디렉토리에 액세스하기 위해 운영 체제에서 제공하는 인터페이스 만 사용하십시오. Windows 공유 디렉터리 때문에 일반적으로 dir 같은 방식으로 작동합니다.

그런데 독자적인 파일 복사 절차를 구현하여 수동으로 대역폭을 제어 할 수 있습니다. 미안 내 솔루션이 너무 순진하거나 적합하지 않은 경우. 쓰기 전용으로 로컬 컴퓨터의 읽기 전용 파일과 열린 파일을 공유 디렉터리에있는 파일 (QFile 참조)을 열 수 있습니다. 다음으로 타이머를 통해 공유 파일에서 데이터의 일부를 읽기 시작합니다 (QTimer 참조). 따라서 데이터 부분 (QTimer 매개 변수)을 복사 할 빈도와 시간당 복사 할 데이터의 바이트 수 (QIODevice::read 함수 매개 변수)를 지정할 수 있습니다.

+0

사실 그것은 해결책이지만 연결이 끊어 지거나 수동으로 확인하는 것과 같은 예외적 인 경우를 고려해야하기 때문에 여전히 까다로운 문제입니다. 또한 바이트가 전송되었고 길을 잃지 않았 음을 어떻게 알 수 있습니까? Qt는 이미 구현 된 것과 같은 것을 기대하고있었습니다. –

+0

합리적인 출발점입니다. 실제 대역폭 제한이 최대 지정 대역폭과 비슷할 때 무너집니다. 대신, 너무 많은 대역폭을 사용하고 있는지 (지금까지/지금까지 사용 된 시간으로 전송되었는지) 각 청크를 확인하고, 그 경우에만 한 기간 동안 'QTimer'를 사용하십시오 (지금까지 전송 된/최대 속도 - 지금까지 사용 된 시간) . – MSalters

+0

@QtLearner : TCP/IP는 이미 귀찮지 않게 바이트 손실을 처리합니다. 꽤 드물기 때문에 (이더넷의 경우 10E-9 패킷 손실) 재전송은 대역폭에 거의 영향을 미치지 않습니다. – MSalters