2010-06-08 16 views
2

Lorsque je sauvegarde un fichier sur le système de fichiers, je dois le stocker dans l'ordre chronologique (seulement trois niveaux de profondeur). Année -> Mois -> Jour -> puis stocker le fichier. (2010 -> Juin -> 01-06-2010 -.> File1.txt Si les dossiers sont déjà dans le système de fichiers alors ne pas les créer simplement enregistrer le fichierComment créer un dossier chronologique en utilisant C#?

Quelle est la meilleure approche

+3

meilleure approche à quoi? Sauvegarde du fichier? Créer la hiérarchie? Conventions de nommage? – Oded

+0

@Oded. Meilleure approche pour créer une hiérarchie – Jango

+2

Vous semblez avoir déjà choisi l'année -> mois -> jour, alors quel est exactement le problème? – Oded

Répondre

6

.? probablement pas le meilleur, mais rapide .. Exécuter avec c: \ temp, et obtenir C:. \ temp \ 2010 \ juni \ 08-06-2010 nom du mois .. BTW dépendant des paramètres régionaux

public static DirectoryInfo GetCreateMyFolder(string baseFolder) 
    { 
     var now = DateTime.Now; 
     var yearName = now.ToString("yyyy"); 
     var monthName = now.ToString("MMMM"); 
     var dayName = now.ToString("dd-MM-yyyy"); 

     var folder = Path.Combine(baseFolder, 
         Path.Combine(yearName, 
         Path.Combine(monthName, 
          dayName))); 

     return Directory.CreateDirectory(folder); 
    } 
+3

Le test Directory.Exists() est inutile - CreateDirectory le fait de toute façon. –

+0

Votre droit. En outre, CreateDirectory renvoie le DirectoryInfo – simendsjo

1
DateTime d = DateTime.Now; 
String s = Path.Combine(d.Year.ToString(), d.ToString("MMMM"), d.ToString("dd-MM-yyyy"), "file1.txt"); 
if (!Directory.Exists(s)) Directory.CreateDirectory(s); 

Pour différents formats de date, ceci est une bonne ressource: http://blog.stevex.net/string-formatting-in-csharp/

Évidemment, vous devez combiner ce chemin au chemin principal dans lequel vous allez enregistrer les fichiers (par exemple: String s2 = Path.Combine("C:\\Test", s);).

+1

IIRC nouvellement créé, 'Directory.CreateDirectory (String);' ne peut créer un dossier qu'un niveau profond. – Nate

+0

@Nate: CreateDirectory s'assure que le chemin entier existe. Il ne fait rien non plus si le répertoire existe déjà, donc le test Directory.Exists() est inutile. –

+0

@Nate En fait, Directory.CreateDirectory crée chaque répertoire dans le chemin s'il n'existe pas. Lire la remarque après la première table http://msdn.microsoft.com/en-us/library/system.io.directory.createdirectory%28VS.71%29.aspx –

0
string basePath = @"c:\temp"; 
var myDate = DateTime.Now; 
DirectoryInfo di = Directory.CreateDirectory(Path.Combine(basePath, myDate.Year.ToString())); 
di = Directory.CreateDirectory(Path.Combine(di.FullName, myDate.ToString("MMMM"))); 
di = Directory.CreateDirectory(Path.Combine(di.FullName, myDate.ToString("dd-MM-yyyy"))); 

Vous pouvez aussi le faire avec un appel CreateDirectory, de cette façon:

string basePath = @"c:\temp"; 
var myDate = DateTime.Now; 
Directory.CreateDirectory(Path.Combine(Path.Combine(Path.Combine(basePath, myDate.Year.ToString()), myDate.ToString("MMMM")), myDate.ToString("dd-MM-yyyy"))); 
0
string StartupPath= @"C:\temp\"; 
string Year = DateTime.Now.Year.ToString(); 
string Month = DateTime.Now.Month.ToString(); 
string Day = DateTime.Now.Day.ToString(); 
Directory.CreateDirectory(StartupPath + "\\" + Year + "\\" + Month + "\\" + Day); 
Questions connexes