Trygve Falch wrote:

On Fri, 2005-01-21 at 10:55 +0000, Dick Porter wrote:


On Fri, 2005-01-21 at 11:27 +0100, Trygve Falch wrote:





File.Copy using UNC-paths under windows works OK, but not surprisingly
under say Linux.


We don't support UNC paths. To do so would I think involve building
samba into mono, which is not sane.



Yeah, I know. But my question was rather; 'Is there a way to do that (eg. copying files to a windows-share from Linux using Mono) any other way?'



Dicks answer is pretty much definitive. However, in the event that what I will explain below can help you...

If you were to mount the samba share into the file system of the Linux machine running Mono, then you could address the Windows shares as if they were a local path. Of course, at that point it is the operating system facilities that make those files available to Mono apps and not any of the Mono framework class libraries.

Once samba client is installed on your system you could do something like the example below.

In this example you have su as root so that you can mount volumens and you create a direcotry in your file system called smbvol so it can serve as the mounting point.
Example 1:


mount -t smbfs -o "username=jmartinez,password=monito" //mfc13bdc/MyShare /mnt/smbvol

using System;
using System.IO;

namespace Mfcon.General.Test
{

public class DirList
{
public static void Main(string []args)
{
string []files;
files = Directory.GetFiles("/mnt/smbvol");


           foreach(string fileName in files)
           {
               Console.WriteLine(fileName);
           }
       }
   }
}

Example 2:

using System;
using System.Diagnostics;

namespace Mfcon.General.Test
{

   public class DirList
   {
       public static void Main(string []args)
       {
           string dirOutPut;

dirOutPut = DirList.ListFilesInSmbVol("//mfc13bdc/MyShare", "MFCONSAULT/jmartinez", "monito");
Console.WriteLine(dirOutPut);
}


public static string ListFilesInSmbVol(string service, string userName, string userPassword)
{
string retVal;


ProcessStartInfo pi = new ProcessStartInfo ();
pi.FileName = "smbclient";
pi.RedirectStandardOutput = true;
pi.UseShellExecute = false;
pi.Arguments = String.Format("{0} {1} -U {2} -c \"dir\"",
service, userPassword, userName); Process p = null;
try
{
p = Process.Start (pi);
}
catch (Exception e)
{
Console.WriteLine("Couldn't run smbclient: " + e.Message);
return null;
}
retVal = p.StandardOutput.ReadToEnd (); p.WaitForExit ();
if (p.ExitCode != 0)
{
Console.WriteLine("Error running smbclient.");
return null;
}


           if (retVal != null)
           {
               p.Close ();
               return retVal;
           }

           p.Close ();

           return null;
       }
   }
}


Hope this helps

_______________________________________________
Mono-list maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-list

Reply via email to