예제 #1
0
 /// <summary>
 /// Comprovació de l'existencia d'un directori
 /// </summary>
 /// <param name="path">
 /// Ruta de la carpeta a comprovar <see cref="System.String"/>
 /// </param>
 /// <returns>
 /// Existeix = True , No existeix = False <see cref="System.Boolean"/>
 /// </returns>
 public bool DirectoryExists(string path)
 {
     //comrovació d'una ruta samba
     if (isUNCPath(path))
     {
         int    fd;
         string fullpath = @"smb:" + parseUNCPath(path);
         //per comprovar si existeix amb samba miro si es pot obir el directori
         fd = WrapperSambaClient.smbc_opendir(fullpath);
         if (fd < 0)
         {
             if (Stdlib.GetLastError().ToString() == "ENOENT")
             {
                 return(false);
             }
             if (Stdlib.GetLastError().ToString() == "EINVAL")
             {
                 return(false);
             }
             else
             {
                 throw new Exception(Stdlib.GetLastError().ToString());
             }
         }
         else
         {
             WrapperSambaClient.smbc_close(fd);
             return(true);
         }
     }
     else
     {
         return(Directory.Exists(path));                //comprovació d'una ruta local; realment no es necessari
     }
 }
예제 #2
0
        /// <summary>
        /// Llegeix el contingut d'una carpeta
        /// </summary>
        /// <param name="UNCpath">
        /// Ruta de la carpeta que es vol llegir <see cref="System.String"/>
        /// </param>
        /// <returns>
        /// Informació del directori<see cref="CIFSDirInfo"/>
        /// </returns>
        public CIFSDirInfo ReadDir(string UNCpath)
        {
            CIFSDirInfo dirinfo = new CIFSDirInfo();

            int dh = 0;

            dh = WrapperSambaClient.smbc_opendir(@"smb:" + parseUNCPath(UNCpath));
            if (dh < 0)
            {
                System.Console.WriteLine(Stdlib.GetLastError().ToString());
                if (Stdlib.GetLastError().ToString() == "EACCES" || Stdlib.GetLastError().ToString() == "EROFS")
                {
                    throw new UnauthorizedAccessException(Stdlib.GetLastError().ToString());
                }
                if (Stdlib.GetLastError().ToString() == "EINVAL" || Stdlib.GetLastError().ToString() == "ENOENT")
                {
                    throw new DirectoryNotFoundException(Stdlib.GetLastError().ToString());
                }
                if (Stdlib.GetLastError().ToString() == "EXDEV")
                {
                    throw new ArgumentException(Stdlib.GetLastError().ToString());
                }
            }
            else
            {
                IntPtr dirbuf = new IntPtr();

                dirbuf = WrapperSambaClient.smbc_readdir(dh);
                while (dirbuf != IntPtr.Zero)                                                              //recorrem tot el directori
                {
                    SambaDirInfo dir = (SambaDirInfo)Marshal.PtrToStructure(dirbuf, typeof(SambaDirInfo)); //passem el punter a l'estructura
                    dirbuf = WrapperSambaClient.smbc_readdir(dh);

                    //s'ha de controlar quin tipus de recurs s'està llegint

                    System.Console.WriteLine();
                    if (dir.smbc_type == 7 || dir.smbc_type == 8)
                    {
                        if (dir.name != ".." && dir.name != ".")
                        {
                            if (dir.smbc_type == 7)
                            {
                                dirinfo.addDir(dir.name);                                 //afegim el nom del directori a la matriu de directoris del objecte CIFSDirInfo
                            }
                            if (dir.smbc_type == 8)
                            {
                                dirinfo.addFile(dir.name);                                 //afegim el nom del fitxer a la matriu de fitxers del objecte CIFSDirInfo
                            }
                        }
                    }
                }

                WrapperSambaClient.smbc_closedir(dh);
            }


            return(dirinfo);
        }
예제 #3
0
        /// <summary>
        /// Llista els recursos compartits d'un servidor CIFS
        /// </summary>
        /// <param name="UNCpath">
        /// Adreça del servidor CIFS (DNS o IP) <see cref="System.String"/>
        /// </param>
        /// <returns>
        /// Col·lecció de recursos compartits <see cref="Shares"/>
        /// </returns>

        public Shares ShareEnum(string UNCpath)
        {
            /* Realment aquesta mateixa ordre en el cas de samba podria
             * navegar per una carpeta, però s'ha diferenciat de ReadDir
             * per compatibilitat en Win32
             */

            int    dh     = 0;
            Shares shares = new Shares();

            //Comprovació de l'existencia del recurs o carpeta
            dh = WrapperSambaClient.smbc_opendir(@"smb:" + parseUNCPath(UNCpath));
            if (dh < 0)
            {
                throw new IOException(Stdlib.GetLastError().ToString());
            }
            else
            {
                IntPtr dirbuf = new IntPtr();                 //creem un punter gestionat

                dirbuf = WrapperSambaClient.smbc_readdir(dh);
                Share s;
                while (dirbuf != IntPtr.Zero)
                {
                    SambaDirInfo dir = (SambaDirInfo)Marshal.PtrToStructure(dirbuf, typeof(SambaDirInfo));              //passem el punter a l'estructura
                    dirbuf    = WrapperSambaClient.smbc_readdir(dh);
                    s         = new Share();
                    s.comment = dir.comment;
                    s.name    = dir.name;
                    s.type    = CommonShareTypes((int)dir.smbc_type);
                    shares.addShare(s);
                }

                WrapperSambaClient.smbc_closedir(dh);
            }

            return(shares);
        }