Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 12/04/2013, à 13:50

tinangel

[Résolu][C#] Ouverture d'un fichier (txt) via Samba

Bonjour,

Je galère depuis hier sur un problème C#.

Comme indiqué dans le titre je cherche à lire un fichier réseau.

Tout d'abord ma configuration :
- 1 PC sous Ubuntu
- 1 Freebox V6 à laquelle il m'est possible d'accéder via le réseau local en invité en utilisant Samba pour le protocol de partage

J'ai créé un fichier texte banale contenant quelques lignes à l'intérieur à la racine du Disque Dur de la Freebox. Pour accéder au disque voici les différentes possibilités :

1/ smb://freebox/disque%20dur/fichier.txt ( avec ou sans le %20 )
2/ smb://192.168.xx.xx/disque%20dur/fichier.txt ( avec ou sans le %20 )

Lorque j'utilise nautilus pour monter le répertoire bein pas de soucis. Par contre lorsque j'essaye de passer par C# et MonoDevelopp je galère comme un rat mort.

Après plusieurs recherches voilà ce que j'ai déjà utilisé ( cependant il est possible que j'ai mal utilisé les méthodes car je découvre C# et MonoDevelopp ) :

Tentative avec la classe Process ... dans mon cas elle ne répondait pas à mes besoins apparemment
Ensuite avec StreamReader ... c'est ce que j'utilise pour les fichiers locaux mais lorsqu'il s'agit du réseau ça ne passe pas
Et là je suis en train d'essayer avec FileStream ... mais je me retrouve avec les mêmes soucis que sur StreamReader

Je place ici le bout de code en question :



		// Ici je créer une instance de fichier et je traite le message 
            	List<string> messages = new List<string>();
		
                FileStream chemin_reseau;
				
		if ( reseau )
		{
			using (chemin_reseau = new FileStream( 	"smb://freebox/disque%20dur/fichier.txt", 
                           								  	FileMode.Open, 
                           									FileAccess.Read,    
                           									FileShare.ReadWrite
					                                     )
					       );					
			
			using (StreamReader fichier = new StreamReader( chemin_reseau ) ) 
            		{
                		while (fichier.Peek() >= 0) 
                		{
							string ligne = fichier.ReadLine();
							messages.Add( ligne ); // cette variable me retourne une liste des lignes de fichier.txt
							if( console ) Console.WriteLine( ligne ); //si le booléen console est à true alors j'affiche "ligne" dans la console
    	            	        }
	                }
	           }

Là je sèche. Je ne vois pas comment lire le fichier au travers de samba.

La doc ne semble pas super bavarde sur le sujet ( autant celle de Mono que MSDN ). Cette dernière parle plutôt d'une classe WinConnectionAdd2 si je me souviens bien mais n'est pas compatible avec Mono j'ai l'impression.

Si l'un d'entre vous pouvait m'aiguiller je l'en remercie d'avance.

Cordialement,

Tinangel.


[edit]
Voici ma 1ère erreur :
- je n'ai pas inclus le 1er using dans le second ( je suis un abrutis ) bon malgré ça le problème persiste.

Voici le nouveau code :

		if ( reseau )
		{
			using (chemin_reseau = new FileStream( 	"smb://192.168.xx.xx/disque%20dur/fichier.txt", FileMode.Open, FileAccess.Read, FileShare.ReadWrite) )					
			{
				using (StreamReader fichier = new StreamReader( chemin_reseau ) ) 
            			{
                			while (fichier.Peek() >= 0) 
                			{
								string ligne = fichier.ReadLine();
								messages.Add( ligne );
								if( console ) Console.WriteLine( ligne );
    	            		         }
	            		 }
			 }
		 }

Et ici le message d'erreur :

Could not find file "/home/user/.../bin/Debug/smb://192.168.1.130/disque%20dur/fichier.txt".

L'adresse est concaténée au lieu d'être utilisée telle quelle.

[/edit]

Dernière modification par tinangel (Le 12/04/2013, à 19:19)

Hors ligne

#2 Le 12/04/2013, à 19:18

tinangel

Re : [Résolu][C#] Ouverture d'un fichier (txt) via Samba

Bon bein j'ai pas trouvé de solutions miracle,

Du coup voilà ce qu'il y a à savoir.

Côté Windows->Linux le partage Samba devrait se faire en utilisant le CIFS qui est inclut d'office avec l'OS. On monte le lecteur réseau ou on pointe sur le fichier de la manière suivante "\\ipserveur\partage\fichier.txt".

Côté Linux-> Linux je n'ai pas trouvé de moyen simple d'accéder au partage Samba, du coup je vais me rabattre sur la solution Process ( je suis tombé sur un lib qui s'appelle CIFSclient mais qui ne semble plus maintenue ).

La solution Process consiste donc à utiliser le "service" smbclient d'ubuntu puis de pointer vers son partage. Puis une fois dans le répertoire partagé, ne reste plus qu'à utiliser les fonctions de smbclient ( tapez "help" pour lister les commandes ).

Si vous disposez d'informations sur une fonction ou librairie qui simplifierait ça je suis preneur.

Bon, du coup je dois développé 2 modules pour la lecture de mes fichiers ( 1 pour Win et l'autre pour Tux ) je vais vois côté MacOS pour la partie smb sans quoi je devrais là aussi me rabattre sur afp.

Pourquoi faire simple quand on peut faire compliquer :-) .

J'espère que ça évitera à certains des galères inutiles.

Bon courage et merci quand même à ceux qui auront pris le temps de chercher.

Cordialement.

Dernière modification par tinangel (Le 12/04/2013, à 19:19)

Hors ligne

#3 Le 12/04/2013, à 22:22

temps

Re : [Résolu][C#] Ouverture d'un fichier (txt) via Samba

C'est bien que ce soit résolu, j'ai lu les postes sans trop comprendre.
J'utilise régulièrement samba en partage de fichiers, et je n'ai jamais rencontré de problèmes pour me connecter avec n’importe quel OS.
Je pense que s'il y a eu un problème, c'est que l'installation de samba n'a pas été piloté et que spn paramétrage, n'est pas au mieux.

Un partage samba, c'est trois lignes, à la limite une quatrième pour donner un nom au groupe de travail, le reste ce n'est que des lignes pour les adorateurs de codes inutiles retardant le dialogue entre machines. Samba a été créé sur des ordinauzor par IBM (je crois il y a longtemps) un truc très simple, il suffit de reprendre sa base elle peut même servir de serveur VOD, sous tous les OS.

En d'autres mots, je pense que c'est un mauvais paramétrage samba qui explique que je n'arrive pas à imaginer le problème rencontré.
Ce n'est pas parce qu'il est écrit ne pas faire ça, qu'il ne faut pas le faire, car il arrive assez souvent que la solution (aux constructions simples ou particulières) soit derrière.

Cordialement


Parce que l'USB bootable est le support des systèmes experts,
Parce que l'USB bootable contient sa propre image au démarrage.
L'USB bootable permet de créer un monde à la dimension de son imagination
https://www.letime.net

Hors ligne

#4 Le 13/04/2013, à 09:02

tinangel

Re : [Résolu][C#] Ouverture d'un fichier (txt) via Samba

Bonjour temps,

Merci de ta réponse.

Je prends un instant pour éclairer la demande du post.

Le partage Samba fonctionne correctement là n'est pas le soucis.

Le problème c'est que par exemple lorsque tu utilises Visual Studio/Mono develop sur Windows, tu peux accéder au partage Samba via CIFS ( tu sais lorsque tu créés un lecteur réseau ou que tu accèdes au partage en utilisant l'adresse "\\nom_serveur\partage" ), et lire un fichier comme s'il était en "local".

Prenons l'exemple suivant :
- j'ai 1 fichier qui s'appelle toto.txt sur un serveur dont le partage s'effectue grâce à Samba accessible de cette manière "//serveur/partage/toto.txt" ( jusque là rien d'anormal ). Ce fichier ce trouve sur un Serveur Linux.
- j'ai un programme en C# qui doit aller récupérer ce fichier mais lui est censé être multi-os. ( jusque là toujours rien d'anormal )
- pour Windows le partage CIFS permet d'accéder au fichier toto.txt en toute transparence. ( pas de soucis de ce côté là )
- par contre pour un Linux ce n'est pas le cas ( confère mes posts précédents ) du coup pour me permettre d'accéder au fichier via Samba je suis obligé de passer par la méthode Process qui en fait va me permettre de contrôler Samba dans C# en utilisant en arrière plan le Shell ( méthode que je n'apprécie quand dernier recours, et là c'est le cas ).

J'aurais préféré une méthode du même type que le StreamReader ou FileStream qui m'aurais permis de ne pas avoir à créer de nouvelles classes pour ça.

Bon cette méthode me permet au moins de contourner le soucis.

Merci encore pour ton retour.

Cordialement.

Hors ligne

#5 Le 13/04/2013, à 10:24

temps

Re : [Résolu][C#] Ouverture d'un fichier (txt) via Samba

Bonjour,
Peux-tu indiquer ce que contient ton

/etc/samba/smb.conf

?
sur ton linux qui partage.

Ce que je fais quand je crée un partage samba,
En premier je crée un répertoire media/quelquechose
ensuite je monte mon media/quelquechose au boot de la machine donc j'ajoute une ligne dans /etc/fstab le paramétrage je le fais en fonction de la nature (ext4, ...)
enfin je paramettre mon smb.conf
en ajoutant trois lignes qui disent que le répertoire  media/quelquechose est partagé

Je fais ça depuis 2006 et je n'ai jamais rencontré le problème décrit, lundi matin je peux mettre des captures d'écran pour montrer  qu'on peut très bien lire tous les fichiers en ligne de commande sous samba quelque soit l'OS

Dernière modification par temps (Le 13/04/2013, à 10:27)


Parce que l'USB bootable est le support des systèmes experts,
Parce que l'USB bootable contient sa propre image au démarrage.
L'USB bootable permet de créer un monde à la dimension de son imagination
https://www.letime.net

Hors ligne

#6 Le 13/04/2013, à 10:56

tinangel

Re : [Résolu][C#] Ouverture d'un fichier (txt) via Samba

Merci encore de répondre aussi rapidement,

Je pense avoir trouvé mon erreur.

Le soucis le voici :
- le chemin d'accès au disque dur de la Freebox via Samba


Pour ceux qui utilisent la Freebox pour partager les infos, l'adresse pour accéder au fichier est la suivante : smb://freebox/Disque dur/

Cependant Linux est sensible à la casse sauf que smbclient ne l'est pas. Lorsque je testais par l'intermédiaire de smclient l'adresse vers le DD de la freebox était la suivante "//freebox/disque dur" (et ça marche trés bien comme ça )

Je me suis dis que c'était peut-être ma version de Mono-Developp qui était fournit avec la 12.04LTS qui me posait des soucis et par conséquent j'ai entrepris de migrer ma version vers la 12.10 qui à l'heure actuelle doit-être beaucoup plus stable.

En attendant j'ai basculé sur mon iMac pour ne pas perdre du temps en attendant la migration.

Infos pour les Mac User : pour accéder à Samba en C# ( ou autre d'ailleurs ) l'adresse d'accès est la suivante ( pour la freebox, à adapter suivant le nom du partage ) : "/Volumes/Disque dur/toto.txt" ( c'est à ce moment que je me suis rendu compte de mon erreur sur Tux ... "Disque dur" et pas "disque dur". )

Sous MacOSX Lion ça fonctionne sans soucis et je pense que ça sera aussi le cas sous Ubuntu ( y'à pas de raison ). Je testerais et vous ferais mon retour.

En tout cas je te remercie ainsi que toutes les personnes ayant chercher.

Bon WE tout le monde.

[edit]
Donc je confirme. C'est bien le soucis énoncé plus haut.
[/edit]

Dernière modification par tinangel (Le 13/04/2013, à 20:36)

Hors ligne