Accueil > > > VISTA ET LES LIENS SYMBOLIQUES
VISTA ET LES LIENS SYMBOLIQUES
Information sur la source
Description
Source simple mettant en oeuvre une nouveauté apparu sous Vista (existant déjà dans le monde Unix), les liens symboliques. Pour ceux qui découvre, un lien symbolique (Symbolic link ou Symlink) est un "lien" sur un fichier ou répertoire créé au niveau du système de fichier NTFS. C'est en quelque sorte un "alias". Cette classe offre la possibilité de créér des liens symboliques sur des fichiers ou répertoires. Mais aussi de savoir si un chemin est un lien symbolique sur un fichier/répertoire, de répertorier l'ensemble des liens symboliques existants sur des fichiers/répertoires.
Source
- namespace Vista.IO
- {
- /// <summary>
- /// Classe fournissant un moyen de créer un lien symbolique sur un fichier ou un répertoire.
- /// </summary>
- /// <remarks>Requiert une élévation de privilège.</remarks>
- public static class Symlink
- {
- /// <summary>
- /// Créé un lien symbolique sur un fichier ou un répertoire.
- /// </summary>
- /// <param name="path">Chemin fichier ou répertoire.</param>
- /// <param name="pathName">Chemin du lien symbolique.</param>
- /// <returns><b>True</b> si réussi;<b>False</b> en cas d'échec.</returns>
- /// <remarks>Prise en charge non supporté sur ressource réseau.</remarks>
- public static bool CreateSymbolicLink(string path, string pathName)
- {
- try
- {
- bool bSuccess = false;
-
- if (string.IsNullOrEmpty(pathName))
- throw new Exception("The symbolic link name is empty.");
-
- if (PathIsDirectory(path))
- {
- if (Directory.Exists(path))
- bSuccess = NativeMethods.CreateSymbolicLink(pathName, path, NativeMethods.SYMLINK_FLAG_DIRECTORY);
- }
- else
- {
- if (File.Exists(path))
- bSuccess = NativeMethods.CreateSymbolicLink(pathName, path, NativeMethods.SYMLINK_FLAG_FILE);
- }
-
- return bSuccess;
- }
- catch (Exception)
- {
- return false;
- }
- }
-
- /// <summary>
- /// Récupère les liens symboliques existants sur des fichiers.
- /// </summary>
- /// <param name="path">Chemin à parcourir.</param>
- /// <param name="search">Profondeur de recherche.</param>
- /// <returns></returns>
- public static IEnumerable<string> GetSymbolicLinkFiles(string path, SearchOption search)
- {
- List<string> listF = new List<string>();
-
- if (PathIsDirectory(path))
- {
- if (Directory.Exists(path))
- {
- try
- {
- listF.AddRange(Directory.GetFiles(path, "*", search));
- }
- catch (Exception)
- { }
-
- foreach (string file in listF)
- {
- if (FileIsSymbolicLink(file))
- yield return file;
- }
-
- }
- }
- }
-
- /// <summary>
- /// Récupère les liens symboliques existants sur des répertoires.
- /// </summary>
- /// <param name="path">Chemin à parcourir.</param>
- /// <param name="search">Profondeur de recherche.</param>
- /// <returns></returns>
- public static IEnumerable<string> GetSymbolicLinkDirectories(string path, SearchOption search)
- {
- List<string> listD = new List<string>();
-
- if (PathIsDirectory(path))
- {
- if (Directory.Exists(path))
- {
- try
- {
- listD.AddRange(Directory.GetDirectories(path, "*", search));
- }
- catch (Exception)
- { }
-
- foreach (string dir in listD)
- {
- if (DirectoryIsSymbolicLink(dir))
- yield return dir;
- }
-
- }
- }
- }
-
- /// <summary>
- /// Indique si un chemin est un répertoire.
- /// </summary>
- /// <param name="path">Chemin à tester.</param>
- /// <returns><b>True</b> si répertoire;<b>False</b> si fichier ou autre.</returns>
- private static bool PathIsDirectory(string path)
- {
- try
- {
- if (!File.Exists(path))
- {
- return ((new FileInfo(path).Attributes & FileAttributes.Directory) == FileAttributes.Directory)
- ? true : false;
- }
- else
- return false;
- }
- catch (Exception)
- {
- return false;
- }
- }
-
- /// <summary>
- /// Indique si un chemin est un lien symbolique sur un fichier.
- /// </summary>
- /// <param name="path">Fichier à tester.</param>
- /// <returns><b>True</b> si oui;<b>False</b> si non.</returns>
- public static bool FileIsSymbolicLink(string path)
- {
- return ((new FileInfo(path).Attributes & FileAttributes.ReparsePoint) == FileAttributes.ReparsePoint)
- ? true : false;
- }
-
- /// <summary>
- /// Indique si un chemin est un lien symbolique sur un répertoire.
- /// </summary>
- /// <param name="path">Fichier à tester.</param>
- /// <returns><b>True</b> si oui;<b>False</b> si non.</returns>
- public static bool DirectoryIsSymbolicLink(string path)
- {
- return ((new DirectoryInfo(path).Attributes & FileAttributes.ReparsePoint) == FileAttributes.ReparsePoint)
- ? true : false;
- }
- }
- }
namespace Vista.IO
{
/// <summary>
/// Classe fournissant un moyen de créer un lien symbolique sur un fichier ou un répertoire.
/// </summary>
/// <remarks>Requiert une élévation de privilège.</remarks>
public static class Symlink
{
/// <summary>
/// Créé un lien symbolique sur un fichier ou un répertoire.
/// </summary>
/// <param name="path">Chemin fichier ou répertoire.</param>
/// <param name="pathName">Chemin du lien symbolique.</param>
/// <returns><b>True</b> si réussi;<b>False</b> en cas d'échec.</returns>
/// <remarks>Prise en charge non supporté sur ressource réseau.</remarks>
public static bool CreateSymbolicLink(string path, string pathName)
{
try
{
bool bSuccess = false;
if (string.IsNullOrEmpty(pathName))
throw new Exception("The symbolic link name is empty.");
if (PathIsDirectory(path))
{
if (Directory.Exists(path))
bSuccess = NativeMethods.CreateSymbolicLink(pathName, path, NativeMethods.SYMLINK_FLAG_DIRECTORY);
}
else
{
if (File.Exists(path))
bSuccess = NativeMethods.CreateSymbolicLink(pathName, path, NativeMethods.SYMLINK_FLAG_FILE);
}
return bSuccess;
}
catch (Exception)
{
return false;
}
}
/// <summary>
/// Récupère les liens symboliques existants sur des fichiers.
/// </summary>
/// <param name="path">Chemin à parcourir.</param>
/// <param name="search">Profondeur de recherche.</param>
/// <returns></returns>
public static IEnumerable<string> GetSymbolicLinkFiles(string path, SearchOption search)
{
List<string> listF = new List<string>();
if (PathIsDirectory(path))
{
if (Directory.Exists(path))
{
try
{
listF.AddRange(Directory.GetFiles(path, "*", search));
}
catch (Exception)
{ }
foreach (string file in listF)
{
if (FileIsSymbolicLink(file))
yield return file;
}
}
}
}
/// <summary>
/// Récupère les liens symboliques existants sur des répertoires.
/// </summary>
/// <param name="path">Chemin à parcourir.</param>
/// <param name="search">Profondeur de recherche.</param>
/// <returns></returns>
public static IEnumerable<string> GetSymbolicLinkDirectories(string path, SearchOption search)
{
List<string> listD = new List<string>();
if (PathIsDirectory(path))
{
if (Directory.Exists(path))
{
try
{
listD.AddRange(Directory.GetDirectories(path, "*", search));
}
catch (Exception)
{ }
foreach (string dir in listD)
{
if (DirectoryIsSymbolicLink(dir))
yield return dir;
}
}
}
}
/// <summary>
/// Indique si un chemin est un répertoire.
/// </summary>
/// <param name="path">Chemin à tester.</param>
/// <returns><b>True</b> si répertoire;<b>False</b> si fichier ou autre.</returns>
private static bool PathIsDirectory(string path)
{
try
{
if (!File.Exists(path))
{
return ((new FileInfo(path).Attributes & FileAttributes.Directory) == FileAttributes.Directory)
? true : false;
}
else
return false;
}
catch (Exception)
{
return false;
}
}
/// <summary>
/// Indique si un chemin est un lien symbolique sur un fichier.
/// </summary>
/// <param name="path">Fichier à tester.</param>
/// <returns><b>True</b> si oui;<b>False</b> si non.</returns>
public static bool FileIsSymbolicLink(string path)
{
return ((new FileInfo(path).Attributes & FileAttributes.ReparsePoint) == FileAttributes.ReparsePoint)
? true : false;
}
/// <summary>
/// Indique si un chemin est un lien symbolique sur un répertoire.
/// </summary>
/// <param name="path">Fichier à tester.</param>
/// <returns><b>True</b> si oui;<b>False</b> si non.</returns>
public static bool DirectoryIsSymbolicLink(string path)
{
return ((new DirectoryInfo(path).Attributes & FileAttributes.ReparsePoint) == FileAttributes.ReparsePoint)
? true : false;
}
}
}
Conclusion
Bien évidement utilisable sous Vista uniquement et Windows 2008 Server. La création de lien symbolique nécessite une élévation de privilège. En conséquence pour tester, désactiver temporairement l'UAC.
Bon dév ++
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
[C#] Lien HyperTexte dans un MessageBox [ par jeffwow ]
J'aimerais mettre un lien hyper texte du style mailto dans un MessageBox. Quelqu'un sait comment s'y prendre?Jeff
lien entre TextBox et Calendar?! [ par Jula ]
toujours moi...cette fois-ci je voudrais que ce que l'utilisateur entre dans une TextBox ai une influence sur un calendar, je fé donc ça:coté graphic:
Ecrans de login WinXP [ par ppao ]
Salut,Est-il possible de créer des écrans de login et de boot pour WinXP (logonui.exe et ntoskrnl.exe) en C# ?Sur themexp.org, ils donnent un lien ver
Créer lien odbc en c#? [ par Choumi1980 ]
hello tous le monde,y a t'il quelqu'un qui sache me dire comment hardcoder la création d'un lien odbc pour Access ou MySQL en c# .net??Un grand merci
Lien vers site internet [ par giorgio08 ]
Bonjour a tous, j'aurais voulu savoir comment faire pour créer un lien vers un site internet, j ai l'adresse et je voudrais que quand l'utilisateur ap
DataGrid et lien [ par tobleronne ]
Bonjour je genere un datagrid, je voudrais pouvoir cliquer sur un <tr> --> ligne entiere, généré donc par le dadagrid, pour pouvoir y incerer
Comment ajouter un lien hypertext ou URL dans un RichTextBox ? [ par nicola2s ]
Quand je saisie du text, je voudrais avoir la possibilité d'affecter un lien a une partie du text !Je n'ai pas trouvé la fonction qui permet de faire
Besoin d'un rappel Datagrid, et d'autres idées... [ par Kati83 ]
Bonjour,J'ai mis en place un datagrid me permettant d'afficher des lignes classées suivant un indice.Voici les champs de mon datagrid : Indice || Text
Lien utile à la communauté... [ par Arthenius ]
Voila pas de question ce coup-ci mais un lien utile(en anglais) : mais bien sympa quand même...http://www.syncfusion.com/FAQ/WinForms/default.aspdes e
Ouvrir une popup webForm [ par flocausse ]
Bonjour,Voila mon problème: Je voudrais à partir d'une webform en cliquant sur un lien ouvrir une popup avec la taille que je veux et sans menus. Je
|
Derniers Blogs
TECHDAYS PARIS 2012 : COMMENT SHAREPOINT A SAUVé MES TECHDAYSTECHDAYS PARIS 2012 : COMMENT SHAREPOINT A SAUVé MES TECHDAYS par ROMELARD Fabrice
Speakers : Lionel Limozin et Alain Marty La session commence par une découverte de SharePoint à travers la mise en place d'un environnement SharePoint pour la gestion des Sessions animées par BeWise. Le besoin est très ba...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice PERSPECTIVE 3.0 POUR SILVERLIGHT 5.0PERSPECTIVE 3.0 POUR SILVERLIGHT 5.0 par odewit
Je viens de publier la version 3.0 de Perspective pour Silverlight, qui regroupe un portage sous Silverlight 5.0 des fonctionnalités de Perspective 2.0, le framework 3D de haut-niveau introduit récemment et de nouveaux exemples de code. En voici la li...
Cliquez pour lire la suite de l'article par odewit TECHDAYS PARIS 2012 : TOP 10 DES BEST PRACTICES POUR SQL SERVERTECHDAYS PARIS 2012 : TOP 10 DES BEST PRACTICES POUR SQL SERVER par ROMELARD Fabrice
Speaker : Nadia Ben El Kadi Configuration machine La session commence par la toute première question à se poser lors de la mise en place d'environnement SQL Server, la configuration des machines : Type de mac...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2012 : KINECT + OFFICE 365 UN BON GESTE POUR VOTRE SITECHDAYS PARIS 2012 : KINECT + OFFICE 365 UN BON GESTE POUR VOTRE SI par ROMELARD Fabrice
Speakers : Fabrice Barbin, Samuel Blanchard, Julien Lo Presti Titre Prometteur et attractif invitant à voir comment lier le composant ludique Kinect dans le cadre d'une structure IT classique, notamment au travers de la plat...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2012 : PLEINIèRE DU PREMIER JOURTECHDAYS PARIS 2012 : PLEINIèRE DU PREMIER JOUR par ROMELARD Fabrice
KeyNotes du premier jour pour les développeurs. La session est principalement axée sur une des principales directions prise par Microsoft à travers tous ses nouveaux produits : Cloud privé ou public (Solution Azure) ...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Logiciels
Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|