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

Résolu
SupaLou Messages postés 74 Date d'inscription samedi 10 janvier 2004 Statut Membre Dernière intervention 19 septembre 2006 - 6 juil. 2006 à 12:02
SupaLou Messages postés 74 Date d'inscription samedi 10 janvier 2004 Statut Membre Dernière intervention 19 septembre 2006 - 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

13 réponses

sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
6 juil. 2006 à 16:34
Essaye en doublant les \

ex : D:\\\\test.txt

Sébastien FERRAND (
blog)
Consultant Indépendant
[Microsoft MVP Visual C#]
3
bernie666 Messages postés 427 Date d'inscription mercredi 1 octobre 2003 Statut Membre Dernière intervention 29 janvier 2008 1
6 juil. 2006 à 12:08
    Pas de partages pas de chocolat ;)
0
SupaLou Messages postés 74 Date d'inscription samedi 10 janvier 2004 Statut Membre Dernière intervention 19 septembre 2006
6 juil. 2006 à 13:40
lol ! ! !

Nan mais sérieusement c'est pas possible sans partage???
je trouverai ca étonnant mais bon...
0
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
6 juil. 2006 à 13:58
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#]
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
SupaLou Messages postés 74 Date d'inscription samedi 10 janvier 2004 Statut Membre Dernière intervention 19 septembre 2006
6 juil. 2006 à 14:29
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
0
bernie666 Messages postés 427 Date d'inscription mercredi 1 octobre 2003 Statut Membre Dernière intervention 29 janvier 2008 1
6 juil. 2006 à 14:40
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 :)

++
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
6 juil. 2006 à 14:52
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
0
SupaLou Messages postés 74 Date d'inscription samedi 10 janvier 2004 Statut Membre Dernière intervention 19 septembre 2006
6 juil. 2006 à 14:57
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

++
0
bernie666 Messages postés 427 Date d'inscription mercredi 1 octobre 2003 Statut Membre Dernière intervention 29 janvier 2008 1
6 juil. 2006 à 15:05
    Mais pourquoi tu ne partages pas un rep avec les fichiers adéquats dedans ... et tu définies une bonne sécurité NTFS ...
0
SupaLou Messages postés 74 Date d'inscription samedi 10 janvier 2004 Statut Membre Dernière intervention 19 septembre 2006
6 juil. 2006 à 15:19
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!!
0
SupaLou Messages postés 74 Date d'inscription samedi 10 janvier 2004 Statut Membre Dernière intervention 19 septembre 2006
6 juil. 2006 à 16:31
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...
0
SupaLou Messages postés 74 Date d'inscription samedi 10 janvier 2004 Statut Membre Dernière intervention 19 septembre 2006
6 juil. 2006 à 16:52
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

++
0
SupaLou Messages postés 74 Date d'inscription samedi 10 janvier 2004 Statut Membre Dernière intervention 19 septembre 2006
6 juil. 2006 à 16:59
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...
0
Rejoignez-nous