Archive pour la catégorie ‘Programmation’

Opérations sur les fichiers

Concaténer un répertoire et un fichier

Voici, à priori, la méthode recommandée pour combiner un répertoire et un nom de fichier sans avoir à ce soucier si le chemin termine ou non par un séparateur de répertoire « / »

Path.Combine(nomRepertoire,nomFichier);

Attention, toute fois, on peut être surpris par le résultat si nomFichier commence par un anti-slash (« / »)

Plus d’informations sur le site MSDN

et sur les comportements étranges (à première vue mais normaux après réflexion) : Hilton Giesenow

Extraire le nom du fichier sans le chemin

System.IO.Path.GetFileName(string nomFichierLong);

Récupérer le chemin de l’éxécutable

Path.GetDirectoryName(Application.ExecutablePath);

Récupérer le répertoire windows

Environment.GetEnvironmentVariable("SystemRoot");

Linq To SQL / Linq To Entity (Entity Framework)

Comme l’accès aux données est un sujet qui fait pas mal parler de lui en ce moment du côté DotNet, voici quelques liens pour démystifier les deux produits phares : Linq To Sql & Linq To Entities

En français :

Anglais :

Produits – implémentation :

Visual Studio : mode debug / mode release

Dans Visual Studio 2005 ou 2008, on n’y prête pas souvent garde mais dans la barre d’outils une liste déroulante est positionnée à « debug ». Cela signifie que VS compilera par défaut, le code avec des instructions additionnelles qui permettront de débuger l’application.

Parmi les choix de cette liste, figure l’item « Release ». Ce mode indique que Visual Studio, optimisera le code généré (je ne sais pas précisément dans quelle mesure). Etrangement, des fichiers pdb (CF ci-dessous) seront aussi générés par défaut.

Les Fichiers PDB :
Ces fichiers contiennent des informations de debugage. Normalement, il ne faut ni les déployer ni les distribuer mais leur présence dans le même répertoire que l’exécutable à l’avantage de remonter les numéros de ligne dans les stacktraces si une exception survient (sinon seules, les appels de méthodes apparaitront).

En théorie les méthodes doivent pas comporter beaucoup de lignes, donc ça ne devrait pas être nécessaire d’avoir le numéro de ligne. En pratique, on pas toujours seul sur un projet a faire des efforts de codage, quelques fois on récupère des bouts de code, dont on a pas le temps de ré-écrire proprement.

Ainsi, contrairement aux bonnes pratiques, je préfère déployer ces fichiers pdb.

A noter aussi que ces fichiers pdb permettent de simplifier le   »reverse-engineering » et augmente donc le risque de « vulnérablilité » d’un programme.

Au final, pour ce qui est de l’usage des modes : voici ce que j’ai décider de faire :

  • Par défaut j’utilise le mode debug pour développer sur ma machine
  • Ensuite dès que je souhaite faire une version, je passe en mode release pour générer l’exécutable final (avant d’être intégré dans un kit d’installation).
  • Fichiers pdb : distribuer avec le fichier .exe

Expressions Régulières – regex(p)

Un développeur doit souvent analyser des chaines de caractères, valider des motifs, découper une chaine de caractère en jetons, etc.Toutes ses tâches sont réalisables à l’aide des expressions régulières (appelées aussi regex ou regexp).

La syntaxe est un peu compliquée en premier abord, mais une fois comprise mais les expressions régulières permettent des traitements complexes en seulement quelques lignes de code.

Il est difficile d’évaluer le coût processeur/mémoire de cette fonctionnalité (dû à la complexité de la regexp notamment) et je pense qu’il vaut mieux éviter des les utiliser sur des tâches qui requièrent des performances optimales.

Pour apprendre les regexp ou simplement les tester il existe de nombreux utilitaires :

Expresso

Expresso

Expresso

et

The Regulator

Theregulator

The Regulator

D’autres utilitaires sont présentés sur ce Coqblog

Sinon, il existe un portail uniquement consacré à ce sujet : http://regexlib.com/

Ecrire un fichier temporaire

Pour écrire des données dans un fichier temporaire :

string tempFileName = Path.GetTempFileName();
File.WriteAllText(tempFileName, donnees, Encoding.Default);
donnees = File.ReadAllText(tempFileName);