2011-08-02 4 views
2

Je veux faire une application dans qt 4.7.4 où j'ai besoin d'utiliser des dossiers partagés dans Windows.qt windows share

J'ai cherché autour et trouvé que je peux utiliser QDir (hostName), mais il y a un problème: Je ne peux pas contrôler la bande passante utilisée. Je voudrais être en mesure de définir le taux de transfert maximal lorsque accéder à un hôte dans le réseau.

En savoir plus sur l'application: J'ai un dossier sur mon ordinateur dont le contenu je souhaite être identique sur tous les hôtes (dont le nom sera fourni à partir d'un fichier) dans mon réseau. Par exemple, si j'ajoute un nouveau fichier dans ce dossier et exécute l'application, il devrait commencer à copier le fichier dans les hôtes avec la bande passante maximale utilisée par moi.

Merci d'avance pour votre aide.

Répondre

1

Je suppose que la bande passante est gérée par des pilotes de système d'exploitation ou des services tels que QoS ou firewalls. QDir utilise uniquement l'interface fournie par le système d'exploitation pour accéder au répertoire. Cela fonctionne très bien avec le répertoire partagé uniquement parce que le répertoire partagé de Windows se comporte de la même manière que le répertoire habituel. Par ailleurs, vous pouvez essayer manuellement la bande passante de contrôle en implémentant votre propre procédure de copie de fichiers. Désolé si ma solution est trop naïve ou ne correspond pas. Vous pouvez ouvrir le fichier (voir QFile) dans le répertoire partagé pour lecture seule et ouvrir le fichier sur la machine locale en écriture seule. Ensuite, vous commencez à lire des parties de données du fichier partagé par timer (voir QTimer). Vous pouvez donc spécifier à quelle fréquence vous voulez copier des parties de données (paramètre QTimer) et combien d'octets de données vous copiez par temps (QIODevice::read paramètre de fonction).

+0

C'est en effet une solution mais c'est encore délicat car je devrais considérer des cas exceptionnels tels que la perte de connexion et vérifier manuellement pour cela. Aussi, comment saurais-je que les octets ont été transférés et non perdus en chemin? Je m'attendais à ce que Qt avait quelque chose comme ça déjà mis en œuvre. –

+0

C'est un début raisonnable, il se décompose lorsque les limites réelles de bande passante sont similaires à la bande passante maximale spécifiée. Au lieu de cela, vérifiez après chaque morceau si vous utilisez trop de bande passante (transféré jusqu'ici/temps utilisé jusqu'ici), et seulement dans ce cas utilisez un 'QTimer' pour une période (transféré jusqu'ici/taux maximum - temps utilisé jusqu'ici) . – MSalters

+0

@QtLearner: TCP/IP gère déjà les pertes d'octets pour vous, sans vous déranger. Comme c'est assez rare (perte de paquets 10E-9 pour Ethernet), le renvoi n'a pratiquement aucun impact sur bandwitdh. – MSalters