예제 #1
0
        ///////////////////////////////////////////////////////////////////////////////////////////////
        /// <summary>
        /// Modification de la date d'un fichier
        /// </summary>
        /// <param name="clientStream"></param>
        ///////////////////////////////////////////////////////////////////////////////////////////////
        private static void setDate(SocketUtils clientStream)
        {
            string   fichier = clientStream.LireChemin();
            DateTime date    = clientStream.LitDate();

            Mainform.WriteMessageToConsole($"Chemin du fichier: {fichier}, date {date}");
            string path = Path.Combine(Settings.Default.RepertoireDeBase, fichier);

            if (checkPath(ref path))
            {
                setDate(path, date);
            }
        }
예제 #2
0
 ///////////////////////////////////////////////////////////////////////////////////////////////
 private static void setDate(string path, DateTime date)
 {
     try
     {
         if (date.Ticks != 0)
         {
             File.SetCreationTime(path, date);
         }
     }
     catch (Exception e)
     {
         Mainform.WriteErrorToConsole("Erreur dans transfertfichierdate");
         Mainform.WriteExceptionToConsole(e);
     }
 }
예제 #3
0
        ///////////////////////////////////////////////////////////////////////////////////////////////
        /// <summary>
        /// Repondre avec la liste des caracteres invalides pour les chemins sur ce systeme
        /// </summary>
        /// <param name="clientStream"></param>
        ///////////////////////////////////////////////////////////////////////////////////////////////
        private static void caracteresInvalidesChemin(SocketUtils clientStream)
        {
            char[]        b  = Path.GetInvalidPathChars();
            StringBuilder sb = new StringBuilder();

            foreach (char c in b)
            {
                if (c != SocketUtils.TERMINAL) // Attention! mettre le caractere TERMINAL dans le buffer amenerai le client a ignorer les suivants
                {
                    sb.Append(c);
                }
            }

            Mainform.WriteMessageToConsole($"{INVALIDES_CHEMIN}: {sb.ToString()}");
            clientStream.EcritLigne(sb.ToString());
        }
예제 #4
0
 internal async Task <bool> arrete()
 {
     try
     {
         _enroute = false;
         _tcpListener?.Stop();
         _serveurThread?.Abort();
         _tcpListener = null;
         Mainform.WriteMessageToConsole("Serveur arrêté");
     }
     catch (Exception e)
     {
         Mainform.WriteErrorToConsole("Erreur dans serveurThread");
         Mainform.WriteExceptionToConsole(e);
     }
     return(true);
 }
예제 #5
0
        /// <summary>
        /// Lit un nombre donne d'octets dans la socket et les ecrit dans un fichier
        /// </summary>
        /// <param name="taille"></param>
        /// <param name="clientStream"></param>
        /// <param name="sOutput"></param>
        /// <returns></returns>
        public long LitFichier(long taille, FileStream sOutput)
        {
            Stopwatch stopWatch = new Stopwatch();

            stopWatch.Start();

            // Lecture des octets
            byte[] buffer = new byte[1024 * 32];
            long   nbLus  = 0;

            try
            {
                while (nbLus < taille)
                {
                    int nbAlire = (int)Math.Min(buffer.Length, taille - nbLus);
                    int nb      = _clientStream.Read(buffer, 0, nbAlire);
                    sOutput.Write(buffer, 0, nb);
                    nbLus += nb;
                }
            }
            catch (Exception e)
            {
                Mainform.WriteErrorToConsole("Erreur dans transfertfichier");
                Mainform.WriteExceptionToConsole(e);
            }

            stopWatch.Stop();
            TimeSpan ts      = stopWatch.Elapsed;
            double   vitesse = nbLus / ts.TotalSeconds;
            String   vit;

            if (vitesse > 1000)
            {
                vit = (vitesse / 1000.0).ToString("F2") + " ko/s";
            }
            else
            {
                vit = vitesse.ToString("F2") + " o/s";
            }
            Mainform.WriteMessageToConsole($"{nbLus} octets lus en {ts.TotalSeconds.ToString("F3")} sec soit {vit}");
            return(nbLus);
        }
예제 #6
0
        /// <summary>
        /// Download fichier
        /// </summary>
        /// <param name="clientStream"></param>
        private static void downloadFichier(SocketUtils clientStream)
        {
            string result  = REPONSE_NON;
            string fichier = clientStream.LireChemin();
            string path    = Path.Combine(Settings.Default.RepertoireDeBase, fichier);

            if (checkPath(ref path))
            {
                bool existe = File.Exists(path);
                if (existe)
                {
                    Mainform.WriteMessageToConsole($"{DOWNLOAD_FICHIER} Chemin : {path}");
                    clientStream.EcritLigne(REPONSE_OUI);
                    FileStream fileStream = new FileStream(path, FileMode.Open);
                    if (fileStream != null)
                    {
                        long taille = fileStream.Length;

                        // Ecrire la taille
                        clientStream.EcritLigne(taille.ToString());

                        // Copier le fichier
                        clientStream.EcritFichier(taille, fileStream);
                        fileStream.Close();
                        result = REPONSE_OUI;
                    }
                    else
                    {
                        Mainform.WriteMessageToConsole($"{DOWNLOAD_FICHIER} Chemin : {path} fichier non trouvé!");
                    }
                }
                else
                {
                    Mainform.WriteMessageToConsole($"{DOWNLOAD_FICHIER} Chemin : {path} fichier non trouvé!");
                }
            }

            clientStream.EcritLigne(result);
        }
예제 #7
0
        private static bool isParentDirectory(string repertoireDeBase, string sPath)
        {
            if (repertoireDeBase.Equals(sPath))
            {
                // Les deux repertoires sont identiques
                return(true);
            }

            try
            {
                // Repertoire au dessus?
                String parent = Directory.GetParent(sPath).FullName;
                if (parent.Length > 0)
                {
                    return(isParentDirectory(repertoireDeBase, parent));
                }
            }
            catch (Exception)
            {
            }
            Mainform.WriteErrorToConsole("ERREUR: utilisation d'un chemin qui n'est pas sous le répertoire racine: " + sPath);
            return(false);
        }
예제 #8
0
        ///////////////////////////////////////////////////////////////////////////////////////////////
        /// <summary>
        /// Obtient la liste des sous repertoires d'un repertoire
        /// </summary>
        /// <param name="clientStream"></param>
        ///////////////////////////////////////////////////////////////////////////////////////////////
        private static void listeRepertoires(SocketUtils clientStream)
        {
            string repertoire = clientStream.LireChemin();

            Mainform.WriteMessageToConsole($"Contenu de: {repertoire}");
            string path = Path.Combine(Settings.Default.RepertoireDeBase, repertoire);

            string[]      fileEntries = Directory.GetDirectories(path);
            StringBuilder sb          = new StringBuilder();

            if (checkPath(ref path))
            {
                if (fileEntries?.Length > 0)
                {
                    sb.Append(Path.GetFileName(fileEntries[0]));
                    for (int i = 1; i < fileEntries.Length; i++)
                    {
                        sb.Append(SocketUtils.SEPARATEUR).Append(Path.GetFileName(fileEntries[i]));
                    }
                }
            }
            clientStream.EcritLigne(sb.ToString());
        }
예제 #9
0
        private static void creerRepertoire(SocketUtils clientStream)
        {
            string result = REPONSE_NON;

            try
            {
                string repertoire = clientStream.LireChemin();
                Mainform.WriteMessageToConsole($"Répertoire à créer: {repertoire}");
                string path = Path.Combine(Settings.Default.RepertoireDeBase, repertoire);
                if (checkPath(ref path))
                {
                    Directory.CreateDirectory(path);
                    result = REPONSE_OUI;
                }
            }
            catch (Exception e)
            {
                Mainform.WriteErrorToConsole("Erreur dans creerRepertoire");
                Mainform.WriteExceptionToConsole(e);
            }

            Mainform.WriteMessageToConsole($"Réponse: {result}");
            clientStream.EcritLigne(result);
        }
예제 #10
0
        public Mainform()
        {
            _instance = this;

            InitializeComponent();
        }