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

Signaler
Messages postés
74
Date d'inscription
samedi 10 janvier 2004
Statut
Membre
Dernière intervention
19 septembre 2006
-
Messages postés
74
Date d'inscription
samedi 10 janvier 2004
Statut
Membre
Dernière intervention
19 septembre 2006
-
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

13 réponses

Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
36
Essaye en doublant les \

ex : D:\\\\test.txt

Sébastien FERRAND (
blog)
Consultant Indépendant
[Microsoft MVP Visual C#]
Messages postés
427
Date d'inscription
mercredi 1 octobre 2003
Statut
Membre
Dernière intervention
29 janvier 2008
1
    Pas de partages pas de chocolat ;)
Messages postés
74
Date d'inscription
samedi 10 janvier 2004
Statut
Membre
Dernière intervention
19 septembre 2006

lol ! ! !

Nan mais sérieusement c'est pas possible sans partage???
je trouverai ca étonnant mais bon...
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
36
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#]
Messages postés
74
Date d'inscription
samedi 10 janvier 2004
Statut
Membre
Dernière intervention
19 septembre 2006

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
Messages postés
427
Date d'inscription
mercredi 1 octobre 2003
Statut
Membre
Dernière intervention
29 janvier 2008
1
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 :)

++
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
55
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
Messages postés
74
Date d'inscription
samedi 10 janvier 2004
Statut
Membre
Dernière intervention
19 septembre 2006

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

++
Messages postés
427
Date d'inscription
mercredi 1 octobre 2003
Statut
Membre
Dernière intervention
29 janvier 2008
1
    Mais pourquoi tu ne partages pas un rep avec les fichiers adéquats dedans ... et tu définies une bonne sécurité NTFS ...
Messages postés
74
Date d'inscription
samedi 10 janvier 2004
Statut
Membre
Dernière intervention
19 septembre 2006

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!!
Messages postés
74
Date d'inscription
samedi 10 janvier 2004
Statut
Membre
Dernière intervention
19 septembre 2006

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...
Messages postés
74
Date d'inscription
samedi 10 janvier 2004
Statut
Membre
Dernière intervention
19 septembre 2006

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

++
Messages postés
74
Date d'inscription
samedi 10 janvier 2004
Statut
Membre
Dernière intervention
19 septembre 2006

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...