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
UNE JOLIE-HORLOGE ET PAS QU'UN PEU !UNE JOLIE-HORLOGE ET PAS QU'UN PEU ! par neodante
Pour les possesseurs d'iPhone, ça y est Bijin Tokei - qui se traduit littéralement en Français par " Jolie Horloge " - est arrivé et GRATUITEMENT s'il vous plaît ! Après la version Tokyo, Hokkaido, night club, racing, Gal, "pour les mademoiselles'", . voi...
Cliquez pour lire la suite de l'article par neodante TECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICESTECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICES par ROMELARD Fabrice
Animé par: Gaetan Bouveret et Julien Chomarat Business Connectivity Services (BCS) est dans SharePoint 2010 la version 2 de Business Data Catalog (BDC dans SharePoint 2007). Il s'agit de la solution permettant de visualiser des données provenan...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice [DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE[DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE par orion
Comme de nombreux geek, je suis un grand amateur de série TV et je rate régulièrement des épisodes de mes séries préférés. Une solution s'offre à vous avec ce merveilleux site : Tv Gorge - www.tvgorge.com Moteur de recherche à l'appui, vous pouvez ...
Cliquez pour lire la suite de l'article par orion TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Vincent Bellet et Baptiste Giraudier La BI dans SharePoint 2010, Les nouveaux services d'application dans SP2010 et SQL Server Reporting services 2008 R2. La BI dans SharePoint est généralisée pour tous afin de permettre à tous les coll...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Logiciels
DB-MAIN (9.1.0)DB-MAIN (9.1.0)DB-MAIN is a data-modeling and data-architecture tool. It is designed to help developers and anal... Cliquez pour télécharger DB-MAIN Xilisoft DPG Convertisseur (5.1.37.0120)XILISOFT DPG CONVERTISSEUR (5.1.37.0120)Xilisoft DPG Convertisseur offre aux fans de Nintendo DS une bonne solution leur permettant de dé... Cliquez pour télécharger Xilisoft DPG Convertisseur GraphicsGale (2.01.01)GRAPHICSGALE (2.01.01)GraphicsGale est un logiciel de PixelArt avec de nombreuse fonctionnalités permettant de réalisé ... Cliquez pour télécharger GraphicsGale Architecte 3D (Platinum 2010)ARCHITECTE 3D (PLATINUM 2010)Architecte 3D Platinium vous permet de concevoir facilement les plans votre future maison, de l'é... Cliquez pour télécharger Architecte 3D TeamViewer 5 (TeamViewer 5)TEAMVIEWER 5 (TEAMVIEWER 5)Dépanner un ami,expliquer une manipulation devient un jeu d'enfant.
Prise en main d'un autre ord... Cliquez pour télécharger TeamViewer 5
|