2011-08-02 8 views
2

Windowsで共有フォルダを使用する必要があるQt 4.7.4でアプリケーションを作成したいと思います。qt windows share

QDir(hostName)を使用することができますが、問題があります。 使用する帯域幅を制御できません。 ネットワーク内のホストにアクセスすると最大転送レートを設定できるようにしたいと考えています。

アプリの詳細:自分のネットワーク上のすべてのホスト(ファイルから名前が提供される)上でコンテンツが同一であることを希望するコンピュータ上のフォルダがあります。たとえば、そのフォルダに新しいファイルを追加してアプリケーションを実行すると、指定された最大帯域幅を持つホストのファイルのコピーが開始されます。

ご協力いただきありがとうございます。

答えて

1

私は、帯域幅がオペレーティングシステムドライバやQoSやファイアウォールなどのサービスによって管理されているとします。 QDirは、ディレクトリにアクセスするためにオペレーティングシステムによって提供されるインタフェースのみを使用します。 Windowsの共有ディレクトリが通常のディレクトリと同じように動作するため、共有ディレクトリで正常に動作します。

ところで、独自のファイルコピー手順を実装することで、帯域幅を手動で制御することができます。申し訳ありませんが私のソリューションがあまりにもナイーブまたはフィットしない場合。共有ディレクトリにファイルを開いて(読み取り専用の場合はQFileを参照)、書き込み専用のローカルマシンのファイルを開くことができます。次に、タイマーで共有ファイルからデータの一部を読み込みます(QTimer参照)。したがって、データの一部をコピーする頻度(QTimerパラメータ)と、時間ごとにコピーするデータのバイト数(QIODevice::read関数パラメータ)を指定できます。

+0

実際に解決策ですが、接続が失われたり手動でチェックされたりといった例外的なケースを考慮する必要があるため、まだ難しいです。また、バイトが転送され、途中で失われていないことをどのように知っていますか?私は、Qtにすでにこれが実装されていると思っていました。 –

+0

これは合理的なスタートですが、実際の帯域幅の制限が指定された最大帯域幅に似ている場合には壊れます。代わりに、あまりにも多くの帯域幅を使用しているかどうか(今までのところ使用されていた時間/それ以前に転送されたものかどうか)を各チャンクの後ろで調べ、その間に 'QTimer'を使用して。 – MSalters

+0

@QtLearner:TCP/IPは、あなたのためにバイト・ロスを処理しています。非常にまれなので(イーサネットでは10E-9パケットロス)、再送は帯域幅にほとんど影響しません。 – MSalters