[C#] [1.1] Récupération des attributs d'un fichier d'une machine distante [Résolu]

SupaLou 74 Messages postés samedi 10 janvier 2004Date d'inscription 19 septembre 2006 Dernière intervention - 6 juil. 2006 à 12:02 - Dernière réponse : SupaLou 74 Messages postés samedi 10 janvier 2004Date d'inscription 19 septembre 2006 Dernière intervention
- 6 juil. 2006 à 16:59
Bonjour tout le monde,

je cherche un moyen pour récupérer la date de dernière modification d'un fichier se situant sur une machine distante.

C'est à dire faire l'équivalent de ceci mais à distance:

MessageBox.Show(File.GetLastWriteTime("C:\\MonFichier.txt").ToString());

<!-- END TEMPLATE: bbcode_code -->
Seule petite contrainte mais pas des moindres:
Le fichier en question n'est pas partagé!

Merci de votre aide
Afficher la suite 

Votre réponse

13 réponses

Meilleure réponse
sebmafate 4947 Messages postés lundi 17 février 2003Date d'inscription 14 février 2014 Dernière intervention - 6 juil. 2006 à 16:34
3
Merci
Essaye en doublant les \

ex : D:\\\\test.txt

Sébastien FERRAND (
blog)
Consultant Indépendant
[Microsoft MVP Visual C#]

Merci sebmafate 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 102 internautes ce mois-ci

Commenter la réponse de sebmafate
bernie666 427 Messages postés mercredi 1 octobre 2003Date d'inscription 29 janvier 2008 Dernière intervention - 6 juil. 2006 à 12:08
0
Merci
    Pas de partages pas de chocolat ;)
Commenter la réponse de bernie666
SupaLou 74 Messages postés samedi 10 janvier 2004Date d'inscription 19 septembre 2006 Dernière intervention - 6 juil. 2006 à 13:40
0
Merci
lol ! ! !

Nan mais sérieusement c'est pas possible sans partage???
je trouverai ca étonnant mais bon...
Commenter la réponse de SupaLou
sebmafate 4947 Messages postés lundi 17 février 2003Date d'inscription 14 février 2014 Dernière intervention - 6 juil. 2006 à 13:58
0
Merci
nan... comme le dit bernie... s'il n'y a pas de partage... impossible d'accéder au fichier...

Sébastien FERRAND (
blog)
Consultant Indépendant
[Microsoft MVP Visual C#]
Commenter la réponse de sebmafate
SupaLou 74 Messages postés samedi 10 janvier 2004Date d'inscription 19 septembre 2006 Dernière intervention - 6 juil. 2006 à 14:29
0
Merci
okey d'accord je te remerci de confirmer.

Cependant j'ai trouvé une autre méthode mais je n'arrive pas a la faire fonctionner comme je le souhaite.
Grace aux WMI et à la classe Win32_Directory il est apparement possible de récupérer les infos qui m'interressent seulement j'ai un problème au niveau de ma requete WQL. Voilà ce que jai fait:

// Spécification de tous les paramètres requis pour créer la connexion WMI
ConnectionOptions option =
new ConnectionOptions();
option.Username = userName;
option.Password = password;



// Utilisation du namespace WMI dans lequel les opérations de gestion vont être effectuées.

managementScope =

new
System.Management.ManagementScope("\\\" + hostname + "\\root\\cimv2", option);
managementScope.Connect();




// Création de la requête WQLObjectQuery objetQuery new ObjectQuery("Select * From Win32_Directory Where Name 'D:\\test.txt'
");

// La classe ManagementObjectSearcher permet d'extraire une collection d'objets de gestion,
// en fonction de la requête spécifiée lors de son instanciation par le paramètre ObjectQuery.
ManagementObjectSearcher managementObjectSearcher =
new ManagementObjectSearcher(managementScope, objectQuery);

// ManagementObjectCollection représente différentes collections d'objets de gestion extraits via WMI.
managementObjectCollection = managementObjectSearcher.Get();

// On parcours la collection
foreach
(ManagementObject managementObject
in wmiRemoteConnect.getManagementObjectCollection())
{

foreach(PropertyData propertyData
in managementObject.Properties)
   {
      MessageBox.Show(propertyData.Name + ": " + propertyData.Value);
   }
}

Ma connexion marche très bien puisque que lorsque j'enlève la clause Where de ma requête je récupère bien toutes les propriétés mais de tous les fichiers de ma machine. Donc c'est extrèment long!!! Mais si je laisse le Where j'obtiens un message d'erreur  ==> "Demande non valide"
Ma conclusion est qu'il s'agit d'une erreur de syntaxe dans ma requete mais j'ai essayé pas mal de chose et toujours la meme erreur...

Si quelqu'un sait ou est le problème je suis preneur

Merci
Commenter la réponse de SupaLou
bernie666 427 Messages postés mercredi 1 octobre 2003Date d'inscription 29 janvier 2008 Dernière intervention - 6 juil. 2006 à 14:40
0
Merci
Tu récuperes tous les fichiers de ta machine comme tu faisais de la précédente facon mais si pas de partage sur le poste distant :  

D:\\test.txt <=>
Demande non valide  <==== c'est normal ...

a mon avis ce n'est pas la peine d'insister ... a moins que tu refasses le noyaux de la machine distante pour autorisé l'access ... enfin ... bon courage :)

++
Commenter la réponse de bernie666
cs_Bidou 5507 Messages postés dimanche 4 août 2002Date d'inscription 20 juin 2013 Dernière intervention - 6 juil. 2006 à 14:52
0
Merci
Allez, lances-toi dans la refonte du noyaux de la machine distante, et surtout tiens-nous au courant de ton avancement

<hr size= "2" /> VC# forever
=13319
Commenter la réponse de cs_Bidou
SupaLou 74 Messages postés samedi 10 janvier 2004Date d'inscription 19 septembre 2006 Dernière intervention - 6 juil. 2006 à 14:57
0
Merci
Bon alors déjà jme sent pas trop apte pour refaire le noyau de ma machine distante surtout que cest du windows...

Donc pour vérifier t'as théorie j'ai reformuler mon code pour qu'il fonctionne en local. Mais là j'ai toujours la même erreur. Si je laisse le "Where" ==> demande non valide, si je l'enlève je récupère les informations de tous mes fichiers.

Donc voilà apparement cela ne semble pas être un problème de partage réseau...

En tout cas je te remerci pour tes pistes

++
Commenter la réponse de SupaLou
bernie666 427 Messages postés mercredi 1 octobre 2003Date d'inscription 29 janvier 2008 Dernière intervention - 6 juil. 2006 à 15:05
0
Merci
    Mais pourquoi tu ne partages pas un rep avec les fichiers adéquats dedans ... et tu définies une bonne sécurité NTFS ...
Commenter la réponse de bernie666
SupaLou 74 Messages postés samedi 10 janvier 2004Date d'inscription 19 septembre 2006 Dernière intervention - 6 juil. 2006 à 15:19
0
Merci
Alors je continu péniblement mes recherches avant de m'attaquer au noyau de windows comme on me l'a conseillé  lol

Donc j'ai modifié ma requête car pour moi, et d'après google également, l'erreur viendrai bien de là.

j'ai donc fait:
ObjectQuery objetQuery new ObjectQuery("Select * From Win32_Directory where Drive 'D:'");

Et là j'obtiens comme résultat toutes les informations concernant tous les fichiers se situant sur le lecteur D et non plus sur tout le disque ! ! Mine de rien c'est "un petit pas pour l'homme mais un bon de géant pour l'humanité"

Un gros je n'est plus qu'a mettre le fichier que je veux "étudier" sur une partition complètement vierge de mon serveur comme ceux ci je gagnerai en perf'!

Plus sérieusement ma grande question est:pourquoi losque je fais Where Name 'D:\\test.txt' cela plante et losque je fais where Drive 'D:' cela passe niquel ?????

Et ne me dite pas que c'est encore un de ces mystere de l'informatique!!
Commenter la réponse de SupaLou
SupaLou 74 Messages postés samedi 10 janvier 2004Date d'inscription 19 septembre 2006 Dernière intervention - 6 juil. 2006 à 16:31
0
Merci
bon bah je sent que je vais finir par faire comme tu me le disais bernie666, cest à dire partager les repertoires ou se trouve mes fichiers et faire comme ceci:

MessageBox.Show(File.GetLastWriteTime("\\\\MonServeur\\MonPartage\\MonFichier.txt").ToString());

Mais bon je trouve pas ca très propre...
Commenter la réponse de SupaLou
SupaLou 74 Messages postés samedi 10 janvier 2004Date d'inscription 19 septembre 2006 Dernière intervention - 6 juil. 2006 à 16:52
0
Merci
purée mais j'hallucine je viens tout juste de trouver et je retourne sur ce forum pour vous donner la réponse et qu'est ce que je vois tu viens de me la donner!!!!

Effectivement tu as vu juste. J'ai donc corriger ma requete initial:
Select * From CIM_DataFile Where Name = 'D:\\test.txt'
par
Select * From CIM_DataFile Where Name = 'D:\\\\test.txt'

et cela marche niquel ! ! ! !!!!!!!! C'est trop bien ! ! ! !

Dommage pour moi que tu nbe soit pas venu plutôt sebmafate, j'aurai pas perdu ma journée à chercher, mais bon je m'en souviendrai.

En revanche pourrais tu m'expliquer pourquoi il faut mettre quatre "" à la suite??? Parce que là on a pas doublé mais quadruplé si je compte bien car à la base le vrai chemin est 'D:\test.txt'??

Voilà merci à tous cest super

++
Commenter la réponse de SupaLou
SupaLou 74 Messages postés samedi 10 janvier 2004Date d'inscription 19 septembre 2006 Dernière intervention - 6 juil. 2006 à 16:59
0
Merci
heu petite précision quand même pour ceux que ca interesse. Il faut utiliser la classe CIM_DataFile et non pas la classe Win32_Directory comme je l'avais fait car cette dernière, comme son nom l'indique,  permet de récupérer des infos que pour les repertoires et non pas pour les fichiers. Enfin c'est ce que j'en ai conclu car cela ne marchais pas avec elle...
Commenter la réponse de SupaLou

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.