begin process at 2010 02 10 06:39:03
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Fichiers / Disque

 > VISTA ET LES LIENS SYMBOLIQUES

VISTA ET LES LIENS SYMBOLIQUES


 Information sur la source

Note :
Aucune note
Catégorie :Fichiers / Disque Source .NET ( DotNet ) Classé sous :symlink, CreateSymbolicLink, Lien, Symbolique, ReparsePoint Niveau :Débutant Date de création :14/10/2008 Vu / téléchargé :3 088 / 57

Auteur : Willi

Ecrire un message privé
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (6)
Ajouter un commentaire et/ou une note


 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 ++

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources du même auteur

Source avec Zip Source avec une capture Source .NET (Dotnet) EXPLORER LA MFT D'UNE PARTITION NTFS
Source avec Zip Source avec une capture Source .NET (Dotnet) IPHELPER - PORTS TCP/UDP, TABLES DE ROUTAGE/ARP + FONCTIONS ...
Source avec Zip Source avec une capture Source .NET (Dotnet) PREVIEW HANDLER POUR OFFICE OUTLOOK 2007/10 SUR LES FICHIERS...
Source avec Zip Source avec une capture Source .NET (Dotnet) TEAM FOUNDATION SERVER - EXPLOITER LA PARTIE CLIENTE.
Source avec Zip Source avec une capture Source .NET (Dotnet) [.NET3.5] SYSTEM.IO.PIPES - UTILISATION D'UN CANAL NOMMÉ

 Sources de la même categorie

Source avec Zip PILOTER WORD VIA MICROSOFT.OFFICE.INTEROP.WORD par whismeril
Source avec Zip PILOTER EXCEL VIA MICROSOFT.OFFICE.INTEROP.EXCEL par whismeril
Source avec Zip Source .NET (Dotnet) CHECK IDENTICAL FILES par eldim
Source avec Zip Source avec une capture Source .NET (Dotnet) RICHTEXTBOX NUMÉROTÉ (NUMÉROS DE LIGNES) par jray
Source avec Zip Source avec une capture SURVEILLER FICHIERS CRÉÉS AVEC FILESYSTEMWATCHER AMÉLIORÉ par TheOnlyMaX

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture Source .NET (Dotnet) SCRUTER UNE PAGE WEB À LA RECHERCHE DES LIENS ET DES ADRESSE... par developper_man
Source avec Zip Source .NET (Dotnet) JOUER AVEC VOS SHORTCUTS (AJOUT, SUPPRESSION, MODIFICATIONS) par zebobo5
Source avec Zip Source .NET (Dotnet) EXTRAIRE LES URL DES LIENS D'UNE PAGE HTML par JulSoft

Commentaires et avis

Commentaire de badrbadr le 15/10/2008 02:16:21

Le fait que dans Windows XP, écrire "My Pictures" dans l'explorteur renvoyait vers le dossier des images, ça ne compte pas comme un lien symbolique?

Commentaire de petifa le 15/10/2008 15:19:23

Ton code est très classe, bien codé et commenté...
Je ne l'ai pas testé mais je te fait confiance :)

Commentaire de pat84 le 20/10/2008 13:48:55

Bonjour Willi,
Ok pour Vista et les liens symboliques vers les fichiers. Quand aux liens vers les répertoires, cela existe depuis... Windows 2000 !
Précision sans importance pour ton programme très intéressant mais, à citer tout de même pour rendre au César du moment ce qu'il lui appartient ;-))
Patrice.
MVP Windows D.E.

Commentaire de Willi le 20/10/2008 16:40:16 administrateur CS

Ce sont les hardlink qui existent depuis Windows2000. Ici avec la méthode CreateSymbolicLink() ce ne sont pas des hardlink mais des symlink (softlink).
Mais tu as eu raison de préciser les choses. ^^

Commentaire de Vavavlp le 20/10/2008 18:47:40

euh desactivé l'uac ?? c'est plus simple de faire clique droit executer en tant qu'administrateur ;)

Commentaire de Willi le 20/10/2008 19:11:11 administrateur CS

Vavalp, j'ai désactivé l'UAC pour testé en debug mais effectivement ta solution fonctionne aussi sur ton .exe ^^

 Ajouter un commentaire


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 &lt;tr&gt; --&gt; 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


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,076 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales