none
dateien in einem Ordner die heute geschrieben wurden zählen und in label anzeigen RRS feed

  • Frage

  • Hallo.

    Habe angefangen mich in C# reinzuarbeiten und habe mir bisher immer irgendwie aushelfen können, aber bei diesem Problem find ich einfach keine Lösung bzwkomme einfach nicht weiter.

    Ich will versuchen textdokumente, die heute erstellt wurden, als Summe in einem Label anzuzeigen.

    Diese liegen alle in einem Ordner.

    Stelle mir das so vor:

    11 Textdokumente in ordner d:\reporte, davon 5 die heute erstellt wurden.

    somit soll der wert 5 in Label angezeigt werden.

     

    Ich hoffe ihr versteht was ich meine und könnt mir helfen?

     

    Danke schon mal im Vorraus.

    Montag, 14. November 2011 18:08

Antworten

  • Hi,

    das kann man bspw. so machen:

    DirectoryInfo Directory = new DirectoryInfo( @"F:\temp\" );
    List<FileInfo> FileList = Directory.GetFiles( @"*.*" ).Where( f => f.CreationTime >= DateTime.Today.ToList();
    
    


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
    Montag, 14. November 2011 18:59
    Moderator
  • Hi,

    das geht bspw. so:

    MyLabel.Text = FileList.Count;


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Dienstag, 15. November 2011 21:56
    Moderator
  • Hi,

    stimmt, die Klammer hatte ich vergessen. Cut&Paste&Edit ist nicht immer gut :)

      label1.Text = FileList.Count.ToString();

    wäre dann die richtige Variante.

     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
    Mittwoch, 16. November 2011 10:04
    Moderator
  • Das Problem ist nun, da ich das tool bei der arbeit einsetze, das der ordner mit den dateien doch sehr groß (gut über 5000 txt dateien)ist und es somit ziemlich lange braucht bis das einen wert ausgibt bzw sich das fenster dann öffnet.

    Ich hatte mein posting darauf bezogen. Wenn ich untenstehenden Code ausführe, dann dauert es mit einem Verzeichnis in dem sich >10000 Dateien befinden, nicht einmal eine Sekunde um die Anzahl der Dateien zu ermitteln.


    //Visual C# 2008 - .net 3.5 - Any CPU
    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 WindowsFormsApplication1
    {
        public partial class Form1 : Form
        {
            Button aButton;
            Label aLabel;
            public Form1()
            {
                InitializeComponent();
                aButton = new Button();
                aButton.Text = "Ermittle Dateianzahl";
                aButton.Location = new Point( 10, 10);
                aButton.Visible=true ;
                this.Controls.Add(aButton);
                this.aButton.Click += new System.EventHandler(this.aButton_Click);
                
    
                aLabel = new Label();
                aLabel.Location = new Point(10, 60);
                this.Controls.Add(aLabel);
            }
    
            String yourPath= @"F:\Backup";
            private void aButton_Click(object sender, EventArgs e)
            {
                aLabel.Text = "Anzahl : " + ErmittleDateianzahl(yourPath);
            }
    
            private string ErmittleDateianzahl(String path)
            {
                DirectoryInfo DI = new DirectoryInfo(path);
                List FileList = DI.GetFiles(@"*.txt").Where(f => f.CreationTime >= DateTime.Today).ToList();
                return FileList.Count.ToString();
            }
        }
    }
    
    

     


    Hannes

    If you have got questions about this, just ask.

    In a perfect world,
    users would never enter data in the wrong form,
    files they choose to open would always exist
    and code would never have bugs.

    C# to VB.NET: http://www.developerfusion.com/tools/convert/csharp-to-vb/
    Donnerstag, 17. November 2011 07:53

Alle Antworten

  • Hi,

    das kann man bspw. so machen:

    DirectoryInfo Directory = new DirectoryInfo( @"F:\temp\" );
    List<FileInfo> FileList = Directory.GetFiles( @"*.*" ).Where( f => f.CreationTime >= DateTime.Today.ToList();
    
    


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
    Montag, 14. November 2011 18:59
    Moderator
  • Hey

    Danke für die schnelle Hilfe,

    aber halt mich jetzt nicht für dämlich, aber wie bekomm ich den Wert denn jetzt in einem Label als Zahl angezeigt.

    Bin halt n blutiger Anfänger.

    Versuche halt immer auch durch sole Beispiele zu verstehen wie die Funtionen so funktionieren....

    Dienstag, 15. November 2011 21:33
  • Hi,

    das geht bspw. so:

    MyLabel.Text = FileList.Count;


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Dienstag, 15. November 2011 21:56
    Moderator
  • Irgendwie will das nicht hinhauen.

    List<FileInfo> FileList = Directory.GetFiles( @"*.*" ).Where( f => f.CreationTime >= DateTime.Today).ToList();
    Dut hattest da wohl eine ) nach dem Today vergessen, oder? Das war zumindest ein Fehler was er zeigte.

    Zum anderen funktioniert label1.Text = FileList.Count; nicht, da bringt er mir den fehler das er von Ty int nicht in String konvertieren kann.

    Mittwoch, 16. November 2011 09:59
  • Hi,

    stimmt, die Klammer hatte ich vergessen. Cut&Paste&Edit ist nicht immer gut :)

      label1.Text = FileList.Count.ToString();

    wäre dann die richtige Variante.

     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
    Mittwoch, 16. November 2011 10:04
    Moderator
  • Hehe.

    Danke. Habs aber mit ein bisschen köpfchen auch noch hinbekommen :)

    Das Problem ist nun, da ich das tool bei der arbeit einsetze, das der ordner mit den dateien doch sehr groß (gut über 5000 txt dateien)ist und es somit ziemlich lange braucht bis das einen wert ausgibt bzw sich das fenster dann öffnet.

     

    Gäbe es auch noch eine andere variante?

    Mittwoch, 16. November 2011 11:16
  • ja, mit Threads , dazu bitte ich dich aber die MSDN zu bemühen (learning by Doing) ;-)

    Wenn du dazu Fragen hast, kannst du gerne einen neuen Thread Eröffnen

    Grüße

    Mittwoch, 16. November 2011 12:43

  • Das Problem ist nun, da ich das tool bei der arbeit einsetze, das der ordner mit den dateien doch sehr groß (gut über 5000 txt dateien)ist und es somit ziemlich lange braucht bis das einen wert ausgibt bzw sich das fenster dann öffnet.

     

    Gäbe es auch noch eine andere variante?

    Probiere mal aus (so du .NET 4.0) benutzt, ob PLINQ mittels

      DateTime today = DateTime.Today;

      label1.Text = directoryInfo.EnumerateFiles().AsParallel().Where(f => f.CreationTime >= today).Count().ToString();

    merklich schneller ist.


    MVP Data Platform Development My blog
    Mittwoch, 16. November 2011 14:05
  • Hallo,

    Dein Problem wird garantiert nicht bei der Ermittlung der gesuchten Dateien liegen. Mittels GetFiles() 5000 Dateien zu erhalten und das Erstelldatum zu überprüfen dauert nicht einmal eine Sekunde ( zumindest auf meinem Rechner ).

    Wahrscheinlicher ist es, dass die Anzeige der Dateien, in welcher Form auch immer, so langsam ist. Zeig doch mal Deinen Code wie Du die Dateien anzeigst.

     


    Hannes

    If you have got questions about this, just ask.

    In a perfect world,
    users would never enter data in the wrong form,
    files they choose to open would always exist
    and code would never have bugs.

    C# to VB.NET: http://www.developerfusion.com/tools/convert/csharp-to-vb/
    Mittwoch, 16. November 2011 14:28
  • @Heslacher. Wie ist deine Frage gemeint? Ich zeig die Dateien ja nirgends an sondern will ja nur die anzahlt der heut erstellten Dateien in einem Label bzw ner Textbox als Zahl anzeigen lassen. Mehr wird ja nicht angezeigt.

     

    @Martin. Leider nutz ich nur 3.5 da ich auf den meisten pcs an denen ich das tool einsetzten will nur beschränkt schreibrechte hab und nur net3,5 installiert ist.....

    Mittwoch, 16. November 2011 18:59
  • Das Problem ist nun, da ich das tool bei der arbeit einsetze, das der ordner mit den dateien doch sehr groß (gut über 5000 txt dateien)ist und es somit ziemlich lange braucht bis das einen wert ausgibt bzw sich das fenster dann öffnet.

    Ich hatte mein posting darauf bezogen. Wenn ich untenstehenden Code ausführe, dann dauert es mit einem Verzeichnis in dem sich >10000 Dateien befinden, nicht einmal eine Sekunde um die Anzahl der Dateien zu ermitteln.


    //Visual C# 2008 - .net 3.5 - Any CPU
    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 WindowsFormsApplication1
    {
        public partial class Form1 : Form
        {
            Button aButton;
            Label aLabel;
            public Form1()
            {
                InitializeComponent();
                aButton = new Button();
                aButton.Text = "Ermittle Dateianzahl";
                aButton.Location = new Point( 10, 10);
                aButton.Visible=true ;
                this.Controls.Add(aButton);
                this.aButton.Click += new System.EventHandler(this.aButton_Click);
                
    
                aLabel = new Label();
                aLabel.Location = new Point(10, 60);
                this.Controls.Add(aLabel);
            }
    
            String yourPath= @"F:\Backup";
            private void aButton_Click(object sender, EventArgs e)
            {
                aLabel.Text = "Anzahl : " + ErmittleDateianzahl(yourPath);
            }
    
            private string ErmittleDateianzahl(String path)
            {
                DirectoryInfo DI = new DirectoryInfo(path);
                List FileList = DI.GetFiles(@"*.txt").Where(f => f.CreationTime >= DateTime.Today).ToList();
                return FileList.Count.ToString();
            }
        }
    }
    
    

     


    Hannes

    If you have got questions about this, just ask.

    In a perfect world,
    users would never enter data in the wrong form,
    files they choose to open would always exist
    and code would never have bugs.

    C# to VB.NET: http://www.developerfusion.com/tools/convert/csharp-to-vb/
    Donnerstag, 17. November 2011 07:53
  • Hallo humility86,

    Ich gehe davon aus, dass die Antworten Dir weitergeholfen haben.
    Solltest Du noch "Rückfragen" dazu haben, so gib uns bitte Bescheid.

    Grüße,
    Robert

    Montag, 21. November 2011 11:07
    Moderator