Könyvtárak listázása/feldolgozása

Könyvtárak listázása/feldolgozása
2012-01-16T01:55:28+01:00
2012-01-16T10:30:16+01:00
2022-11-24T09:25:50+01:00
Pierre.Batka
Sziasztok!

Van egy programom amely a log file-ok mentésekor létrehoz egy új mappát a saját mappájában (ha még nem létezik), oly módon, hogy a mappa neve az aktuális dátum "yyyy_mm_dd" formátumban.
Egy adatbázis létrehozásához szeretnék létrehozni egy olyan listát melynek minden eleme egy könyvtárhoz tartozó objektum két tulajdonsággal: névvel (ami a könyvtár neve) és dátummal (amit a könyvtár nevéből szeretnék kibányászni).
Az alábbi kód valamiért nem jó, és nem látom, hogy miért:


using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.IO; namespace MENTOR_Measurement_System { public partial class frmDatabase : Form { public frmDatabase() { InitializeComponent(); } private string CurrDir = Environment.CurrentDirectory; public class DB_Dir { public string Name { get; set; } public DateTime Date { get; set; } } public class DirQuery { static void Enum() { //Creating list of directories DirectoryInfo MyRoot = new DirectoryInfo(CurrDir); DirectoryInfo[] MySub = MyRoot.GetDirectories(); var directories = new List<DB_Dir> { foreach (var dir in MySub) { new DB_Dir { Name = dir.Name, Date = DateTime.ParseExact(dir.Name, "yyyy_mm_dd", System.Globalization.CultureInfo.InvariantCulture) } }; }; } } } }

Nagyon megköszönném, ha segítenétek.

Üdv,
Péter
Mutasd a teljes hozzászólást!
Helló!

Én itt elsősorban szervezési problémákat látok.

Pl. létrehozod a CurrDir stringet, aztán hivatkozol rá egy nested class-ban. Nyilván nem fordul le.

Meg létrehozod a List<DB_Dir> listádat, de az a lefutás után meg is semmisül, mivel nem osztályszintű.

Itt egy átalakított kód, ami működik:

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.IO; namespace DirReader { public partial class frmDatabase : Form { public frmDatabase() { InitializeComponent(); List<DB_Dir> list = Query(Environment.CurrentDirectory); } public struct DB_Dir { public string Name { get; set; } public DateTime Date { get; set; } } public List<DB_Dir> Query(string currDir) { List<DB_Dir> list = new List<DB_Dir>(); DirectoryInfo MyRoot = new DirectoryInfo(currDir); DirectoryInfo[] MySub = MyRoot.GetDirectories(); foreach (DirectoryInfo dir in MySub) { list.Add( new DB_Dir { Name = dir.Name, Date = DateTime.ParseExact(dir.Name, "yyyy_mm_dd", System.Globalization.CultureInfo.InvariantCulture) } ); }; return list; } } }
Mutasd a teljes hozzászólást!

  • Mi a hibaüzenet?
    Miért a mappa nevéből akarod kibányászni a dátumot, miért nem használod a CreationTime tulajdonságot?
    Vagy ha nem kell a teljes idő, akkor miért nem használod csak stringként amennyi kell?

    pl:


    class Program { static void Main(string[] args) { string rootDir = "D:\mappak"; DirectoryInfo MyRoot = new DirectoryInfo(rootDir); DirectoryInfo[] MySub = MyRoot.GetDirectories(); var myDir = new List<MyDirInfo>(); foreach (var m in MySub) { myDir.Add(new MyDirInfo { DirName = m.Name, DirDate = m.CreationTime, DirDate2 = m.CreationTime.ToString("yyyy_MM_dd") }); } foreach(var l in myDir) { Console.WriteLine("Mappa: {0}, Dátum: {1}, Dátum2: {2}",l.DirName,l.DirDate,l.DirDate2); } Console.ReadLine(); } } public class MyDirInfo { public string DirName { get; set; } public DateTime DirDate { get; set; } public string DirDate2 { get; set; } }
    Mutasd a teljes hozzászólást!
  • Helló!

    Én itt elsősorban szervezési problémákat látok.

    Pl. létrehozod a CurrDir stringet, aztán hivatkozol rá egy nested class-ban. Nyilván nem fordul le.

    Meg létrehozod a List<DB_Dir> listádat, de az a lefutás után meg is semmisül, mivel nem osztályszintű.

    Itt egy átalakított kód, ami működik:

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.IO; namespace DirReader { public partial class frmDatabase : Form { public frmDatabase() { InitializeComponent(); List<DB_Dir> list = Query(Environment.CurrentDirectory); } public struct DB_Dir { public string Name { get; set; } public DateTime Date { get; set; } } public List<DB_Dir> Query(string currDir) { List<DB_Dir> list = new List<DB_Dir>(); DirectoryInfo MyRoot = new DirectoryInfo(currDir); DirectoryInfo[] MySub = MyRoot.GetDirectories(); foreach (DirectoryInfo dir in MySub) { list.Add( new DB_Dir { Name = dir.Name, Date = DateTime.ParseExact(dir.Name, "yyyy_mm_dd", System.Globalization.CultureInfo.InvariantCulture) } ); }; return list; } } }
    Mutasd a teljes hozzászólást!
  • Köszönöm mindkettőtöknek a gyors választ. Kukipapa megoldása kellett nekem, de Robi80 ötletét is biztosan felhasználom.
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd