« File, Directory, Path » : différence entre les versions
De Banane Atomic
Aller à la navigationAller à la recherche
(→File) |
(→Path) |
||
(Une version intermédiaire par le même utilisateur non affichée) | |||
Ligne 33 : | Ligne 33 : | ||
Directory.CreateDirectory("C:\dossier\sous-dossier"); | Directory.CreateDirectory("C:\dossier\sous-dossier"); | ||
string | IEnumerable<string> folderPaths = Directory.EnumerateDirectories("/chemin/vers/un/dossier", "*.txt", SearchOption.AllDirectories); | ||
// | // search pattern: par défaut "*", ne prend pas en charge les regex | ||
// * -> 0 ou plusieurs caractères | // * -> 0 ou plusieurs caractères | ||
// option par défaut SearchOption.TopDirectoryOnly | // ? -> 1 caractère | ||
// enumeration option: par défaut SearchOption.TopDirectoryOnly | |||
string[] folderPaths = Directory.GetDirectories("/chemin/vers/un/dossier", "*", SearchOption.AllDirectories); | string[] folderPaths = Directory.GetDirectories("/chemin/vers/un/dossier", "*", SearchOption.AllDirectories); | ||
string[] filePaths = Directory.GetFiles("/chemin/vers/un/dossier", "*.txt", SearchOption.AllDirectories); | |||
// pour exclure les liens symboliques | // pour exclure les liens symboliques | ||
Ligne 54 : | Ligne 57 : | ||
Path.GetFileName(Path.GetDirectoryName(filePath)); // nom du dossier parent Dossier | Path.GetFileName(Path.GetDirectoryName(filePath)); // nom du dossier parent Dossier | ||
Path.GetExtension(filePath); // .txt | Path.GetExtension(filePath); // .txt | ||
Path.ChangeExtension(filePath, ".bak"); // C:\Dossier\fichier.bak | |||
Path.GetFileName(filePath); // fichier.txt | Path.GetFileName(filePath); // fichier.txt | ||
Path.GetFileNameWithoutExtension(filePath); // fichier | Path.GetFileNameWithoutExtension(filePath); // fichier |
Dernière version du 25 janvier 2022 à 00:54
File
// test si un fichier existe if (File.Exists(@"C:\Dossier\fichier.txt")) // test si un nom de fichier est valide if (String.IsNullOrWhiteSpace(fileName) || fileName.IndexOfAny(Path.GetInvalidFileNameChars()) >= 0) // lire le contenu d'un fichier en mémoire string content = File.ReadllText(@"C:\Dossier\fichier.txt"); // WriteAllText creates a file, writes the specified string to the file, and then closes the file. File.WriteAllText(@"C:\Dossier\fichier.txt", "Texte à écrire"); // Create a string array that consists of three lines. string[] lines = { "First line", "Second line", "Third line" }; // WriteAllLines creates a file, writes a collection of strings to the file, and then closes the file. File.WriteAllLines(@"C:\Dossier\fichier.txt", lines); // renommer un fichier. La destination doit être un fichier. File.Move(@"C:\Dossier\fichier.txt", @"C:\Dossier\fichier2.txt"); // copier un fichier. La destination doit être un fichier. File.Copy(@"C:\Dossier\fichier.txt", @"C:\Dossier\fichier2.txt"); // If the file to be deleted does not exist, no exception is thrown. File.Delete(@"C:\Dossier\fichier.txt"); |
Directory
// créer toute l'arborescence Directory.CreateDirectory("C:\dossier\sous-dossier"); IEnumerable<string> folderPaths = Directory.EnumerateDirectories("/chemin/vers/un/dossier", "*.txt", SearchOption.AllDirectories); // search pattern: par défaut "*", ne prend pas en charge les regex // * -> 0 ou plusieurs caractères // ? -> 1 caractère // enumeration option: par défaut SearchOption.TopDirectoryOnly string[] folderPaths = Directory.GetDirectories("/chemin/vers/un/dossier", "*", SearchOption.AllDirectories); string[] filePaths = Directory.GetFiles("/chemin/vers/un/dossier", "*.txt", SearchOption.AllDirectories); // pour exclure les liens symboliques string[] folderPaths = new DirectoryInfo("/chemin/vers/un/dossier").GetDirectories() .Where(di => !di.Attributes.HasFlag(FileAttributes.ReparsePoint)).Select(di => di.Name); |
Path
using System.IO; var filePath = @"C:\Dossier\fichier.txt" Path.GetDirectoryName(filePath); // chemin dossier parent C:\Dossier Path.GetFileName(Path.GetDirectoryName(filePath)); // nom du dossier parent Dossier Path.GetExtension(filePath); // .txt Path.ChangeExtension(filePath, ".bak"); // C:\Dossier\fichier.bak Path.GetFileName(filePath); // fichier.txt Path.GetFileNameWithoutExtension(filePath); // fichier Path.Combine(@"C:\AutreDossier", "fichier.odt"); // C:\AutreDossier\fichier.odt // Concatène le chemin courant avec le chemin relatif var cheminAbsolu = Path.GetFullPath(cheminRelatif) |
Caractères interdits
var replacement = ""; var fileName = Path.GetInvalidFileNameChars().Aggregate(fileName, (current, c) => current.Replace(c.ToString(), replacement)); |
Chemin relatif à partir d'un chemin absolu
public static string GetRelativePath(string fromPath, string toPath) { int fromAttr = GetPathAttribute(fromPath); int toAttr = GetPathAttribute(toPath); StringBuilder path = new StringBuilder(260); // MAX_PATH if(PathRelativePathTo( path, fromPath, fromAttr, toPath, toAttr) == 0) { throw new ArgumentException("Paths must have a common prefix"); } return path.ToString(); } private static int GetPathAttribute(string path) { DirectoryInfo di = new DirectoryInfo(path); if (di.Exists) { return FILE_ATTRIBUTE_DIRECTORY; } FileInfo fi = new FileInfo(path); if(fi.Exists) { return FILE_ATTRIBUTE_NORMAL; } throw new FileNotFoundException(); } private const int FILE_ATTRIBUTE_DIRECTORY = 0x10; private const int FILE_ATTRIBUTE_NORMAL = 0x80; [DllImport("shlwapi.dll", SetLastError = true)] private static extern int PathRelativePathTo(StringBuilder pszPath, string pszFrom, int dwAttrFrom, string pszTo, int dwAttrTo); |
Limitations de Windows
- Les chemins avec dossiers + fichier sont d'une longueur maximale de 260
- Les chemins avec dossiers sans fichiers sont d'une longueur maximale de 248 (260-12)
Dossiers spéciaux de Windows
string path = Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles); |
Énumération SpecialFolder | Chemin correspondant (7 64bits) |
---|---|
Windows | C:\Windows |
System | C:\Windows\System32 |
SystemX86 | C:\Windows\SysWOW64 |
UserProfile | C:\Users\<User Name> |
MyDocuments | C:\Users\<User Name>\Documents |
ApplicationData | C:\Users\<User Name>\AppData\Roaming |
LocalApplicationData | C:\Users\<User Name>\AppData\Local |
InternetCache | C:\Users\<User Name>\AppData\Local\Microsoft\Windows\Temporary Internet Files |
ProgramFiles | C:\Program Files (x86) |
WinForm
Ces propriétés ne sont disponible que pour les application WinForm.
// C:\Users\<User Name>\AppData\Roaming\<Company Name>\<Product Name>\<Product Version> string path = Application.UserAppDataPath; // C:\Users\<User Name>\AppData\Local\<Company Name>\<Product Name>\<Product Version> string path = Application.LocalUserAppDataPath; |
Copie récursive d'un dossier
private static void DirectoryCopy(string sourcePath, string destinationPath, bool copySubDirectories) { var directory = new DirectoryInfo(sourcePath); var directories = directory.GetDirectories(); if (!directory.Exists) { throw new DirectoryNotFoundException("Source directory does not exist or could not be found: " + sourcePath); } // If the destination directory doesn't exist, create it. if (!Directory.Exists(destinationPath)) { Directory.CreateDirectory(destinationPath); } // Get the files in the directory and copy them to the new location. var files = directory.GetFiles(); foreach (FileInfo file in files) { string destinationFilePath = Path.Combine(destinationPath, file.Name); var destinationFile = new FileInfo(destinationFilePath); if (destinationFile == null) { file.CopyTo(destinationFilePath, false); } else if (file.LastWriteTime > destinationFile.LastWriteTime) { file.CopyTo(destinationFilePath, true); } } // If copying subdirectories, copy them and their contents to new location. if (copySubDirectories) { foreach (DirectoryInfo subDirectory in directories) { string destinationFolderPath = Path.Combine(destinationPath, subDirectory.Name); DirectoryCopy(subDirectory.FullName, destinationFolderPath, copySubDirectories); } } } |
Uri et Webdav
string path = @"\\serveur@SSL\Webdav\Fichier.txt"; new Uri(path); // UriFormatException: + Invalid URI: The hostname could not be parsed. // Exception dans les cas suivant WebBrowser.Source = new Uri(path); WebBrowser.NavigateToStream((new StreamReader(path)).BaseStream); XDocument.Load(path); XDocument.Load(new StreamReader(path)); var xd = new XmlDocument(); xd.Load(path); xd.Load(new StreamReader(path)); |