/////////////////////////////////////////////////////////////////////////////////////////////// /// <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); } }
/////////////////////////////////////////////////////////////////////////////////////////////// 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); } }
/////////////////////////////////////////////////////////////////////////////////////////////// /// <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()); }
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); }
/// <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); }
/// <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); }
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); }
/////////////////////////////////////////////////////////////////////////////////////////////// /// <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()); }
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); }
public Mainform() { _instance = this; InitializeComponent(); }