Comment puis-je vérifier si le répertoire C:/
contient un dossier nommé MP_Upload
et s'il n'existe pas, créer le dossier automatiquement ?
J'utilise Visual Studio 2005 C#.
Comment puis-je vérifier si le répertoire C:/
contient un dossier nommé MP_Upload
et s'il n'existe pas, créer le dossier automatiquement ?
J'utilise Visual Studio 2005 C#.
using System.IO;
...
Directory.CreateDirectory(@"C:\MP_Upload");
Répertoire.CreateDirectory fait exactement ce que vous voulez : Il crée le répertoire s'il n'existe pas encore. Il n'est pas nécessaire de procéder à une vérification explicite au préalable.
Tous les répertoires spécifiés dans le chemin sont créés, sauf s'ils existent déjà ou si une partie du chemin est invalide. Le paramètre path spécifie un chemin de répertoire, pas un chemin de fichier. Si le répertoire existe déjà, cette méthode ne fait rien.
(Cela signifie également que tous les répertoires le long du chemin sont créés si nécessaire : CreateDirectory(@"C:\a\b\c\d")
suffit, même si C:\a
n'existe pas encore).
Permettez-moi cependant d'ajouter un mot d'avertissement concernant votre choix de répertoire : Créer un dossier directement sous la partition système Root C:\
est désapprouvée. Envisagez de laisser l'utilisateur choisir un dossier ou de créer un dossier dans l'application %APPDATA%
ou %LOCALAPPDATA%
à la place (utilisez Environment.GetFolderPath pour cela). La page MSDN du Dossier spécial de l'environnement L'énumération contient une liste de dossiers spéciaux du système d'exploitation et leurs objectifs.
Cette question a été soulevée sur plusieurs autres fils de discussion. Même si vous n'avez pas besoin de vérifier, cela rend l'intention du code plus claire, ce qui augmente la lisibilité pour une personne extérieure. Donc, garder la vérification pourrait être une bonne chose.
@MattJ. : Dans ce cas, je préfère ajouter un court commentaire plutôt qu'un appel de fonction inutile. Je suis d'accord que ce comportement n'est pas évident, mais, d'un autre côté, le nommer (de manière plus appropriée) EnsureDirectoryExists
aurait rendu la méthode plus difficile à trouver.
using System;
using System.IO;
using System.Windows.Forms;
namespace DirCombination
{
public partial class DirCombination : Form
{
private const string _Path = @"D:/folder1/foler2/folfer3/folder4/file.txt";
private string _finalPath = null;
private string _error = null;
public DirCombination()
{
InitializeComponent();
if (!FSParse(_Path))
Console.WriteLine(_error);
else
Console.WriteLine(_finalPath);
}
private bool FSParse(string path)
{
try
{
string[] Splited = path.Replace(@"//", @"/").Replace(@"\\", @"/").Replace(@"\", "/").Split(':');
string NewPath = Splited[0] + ":";
if (Directory.Exists(NewPath))
{
string[] Paths = Splited[1].Substring(1).Split('/');
for (int i = 0; i < Paths.Length - 1; i++)
{
NewPath += "/";
if (!string.IsNullOrEmpty(Paths[i]))
{
NewPath += Paths[i];
if (!Directory.Exists(NewPath))
Directory.CreateDirectory(NewPath);
}
}
if (!string.IsNullOrEmpty(Paths[Paths.Length - 1]))
{
NewPath += "/" + Paths[Paths.Length - 1];
if (!File.Exists(NewPath))
File.Create(NewPath);
}
_finalPath = NewPath;
return true;
}
else
{
_error = "Drive is not exists!";
return false;
}
}
catch (Exception ex)
{
_error = ex.Message;
return false;
}
}
}
}
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.