Laden...

ListView listet kein Filenamen auf

Erstellt von Borbes vor 6 Jahren Letzter Beitrag vor 5 Jahren 2.440 Views
B
Borbes Themenstarter:in
21 Beiträge seit 2018
vor 6 Jahren
ListView listet kein Filenamen auf

Nabend zusammen,

hier habe ich ein kleines Programm, dass die Dateien bzw die Dateinamen in einem ListView anzeigen soll.
Es ist nur doof, dass es das nicht tut 😃
Ich habe mich natürlich schon auf Fehlersuche begeben und bin fündig geworden bzw konnte den Fehler stark eingrenzen. Der Code an sich funktioniert und macht was er soll, bis auf auf das listView.
Aus irgendeinem Grund, listet er mir die fileNamen nicht in dem View auf. Das ListView hat auf jedenfall eine Spalte und als "Ansicht" ist "Details" eingstellt.
Im listViewItem wurden die fileNamen auch ordnungsgemäß gespeichert. Das hatte ich überprüft mittels einer MessageBox.

Hier mal der Code. Eure geschulten Augen, sehen bestimmt sofort das Problem.



using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace InfoZentrale
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            
        }


        private void button2_Click(object sender, EventArgs e)
        {
            string textBoxInhalt = textBox1.Text;
            string pfad = $"{textBox2.Text}{DateTime.Today.Day}.txt";
            string[] contents = new string[1000];
                  
            File.WriteAllText(pfad, textBoxInhalt);
        }

        public void ReadFolder()
        {
            ListViewItem list = new ListViewItem();
            string verzeichnisPfad = @"C:\Users\Daniel\source\repos\InfoZentrale\InfoZentrale\bin\Debug\";         
        

            DirectoryInfo ParentDirectory = new DirectoryInfo(verzeichnisPfad);

            ListViewItem fileNamen = new ListViewItem();

            foreach (FileInfo f in ParentDirectory.GetFiles())
            {
                fileNamen.SubItems.Add(f.FullName);
            }
            listView1.Items.Add(fileNamen);

     
        }

        private void button4_Click(object sender, EventArgs e)
        {
            ReadFolder();
        }


1
124 Beiträge seit 2012
vor 6 Jahren

Hallo,

versuche es mal mit dem Debugger und nicht mit Message Boxen,dann kannst du bei jedem Schritt deine Liste beobachten:
Debugger: Wie verwende ich den von Visual Studio?

Gruß

H
18 Beiträge seit 2016
vor 6 Jahren

Hi hast du schon mal geguckt was dann wirklich in deiner ListView ist?

Bei mir klappt es jeweils wenn ich es so mache:


ListViewItem fileNamen = new ListViewItem();
foreach (FileInfo f in ParentDirectory.GetFiles())
            {
               fileNamen.Text = f.FullName;
            }
            listView1.Items.Add(fileNamen);

Wenn du möchtest kannst du den Namen von deinem ListViewItem (-> fileName) auch noch vergeben, aber ich glaube für deine Anwendung ist dies nicht notwendig

4.939 Beiträge seit 2008
vor 6 Jahren

Hallo zusammen,

sowohl der Originalcode als auch der von hallochg sind falsch, da nur genau 1 (leeres) ListViewItem hinzugefügt wird.

Innerhalb der Schleife muß jeweils ein neues ListViewItem erzeugt und der ListView hinzugefügt werden:


foreach (FileInfo f in ParentDirectory.GetFiles())
{
  ListViewItem fileName = new ListViewItem();
  fileName.Text = f.FullName;

  listView1.Items.Add(fileName);
}

PS: Wenn du Daten aus dem Verzeichnis, wo sich die Anwendung auch drin befindet, lesen willst, nimm


string verzeichnisPfad = Application.StartupPath;

Niemals absolute Pfade als String-Literale im Programmcode benutzen!

H
18 Beiträge seit 2016
vor 6 Jahren

Oh jaa stimmt, sorry.. ist verloren gegangen
mache ich normalerweise auch so

3.825 Beiträge seit 2006
vor 6 Jahren

Du hast oben SubItems hinzugefügt, das sind Spalten im ListView.

Wenn Du Zeilen hinzufügen willst dann Items hinzufügen. Und vor dem Füllen das Löschen der alten Zeilen nicht vergessen !

Wenn Du nur eine Spalte hast kannst Du mit Items.Add(string) arbeiten. Dann geht es kürzer als Dein Code :

public void ReadFolder()
{
    listView1.Items.Clear();
    foreach (string fil in Directory.GetFiles(Application.StartupPath, "*.*", SearchOption.TopDirectoryOnly))
    {
         listView1.Items.Add(fil);
    }
}

Wenn der Dateiname ohne Pfad angezeigt werden soll dann Path.GetFileName(fil) benutzen.

Grüße Bernd

Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3

B
Borbes Themenstarter:in
21 Beiträge seit 2018
vor 5 Jahren

Danke für die vielen Antworten. Hat alles geklappt.

Da die PDF Dateien nun in dem Listview angezeigt werden, möchte ich nun erreichen, dass ein Klick auf die gewünschte Datei die PDF innerhalb der Forms von mir aus in einer PictureBox angezeigt wird. Quasi ein Quick View.

Entweder es gibt irgendeine Nuget Klasse, wo es ein spezielles View Fenster gibt wo man sich PDF's anzeigen lassen kann, oder es wird wohl darauf hinauslaufen, die PDF in ein Image umzuwandeln und dann über eine PictureBox anzeigen lassen kann.

Hat damit zufällig jemand Erfahrungen? Ich hab schonmal in NuGet geschaut. Aber da findet man fast nur von Datei x --> pdf und nicht umgekehrt.

Die PDFs in eine Liste aufnehmen ist auch nicht möglich.


public List<PdfDocument> pdfliste = new List<PdfDocument>();

string verzeichnisPfad = Application.StartupPath;
            DirectoryInfo ParentDirectory = new DirectoryInfo(verzeichnisPfad);
            foreach (PdfDocument p in ParentDirectory.GetFiles())
            {
                pdfliste.Add(p);
            }

Bei der Liste mosert er über die foreach. Er sagt das die FileInfo Klasse nicht zu PDF Sharp konvertiert werden kann.

1
124 Beiträge seit 2012
vor 5 Jahren

Bei der foreach Schleife gibt das GetFiles wie du schon sagtes FileInfo zurück. Daher muss du die Foreach umbauen auf FileInfo. Und wenn es die List<PdfDocument> bleiben soll, dann musst du noch das file auf PdfDocument casten/konvertieren.

foreach (FileInfo file in ParentDirectory.GetFiles())
            {
                //Wenn file vom Typ PDF ist dann in die pdfliste einfügen
               if(...)
               {
                    pdfliste.Add(file);
               }
            }

Gruß

3.825 Beiträge seit 2006
vor 5 Jahren

Für PDF gibt es keine Preview. Außer das Icon für PDF selber :

https://image.flaticon.com/icons/svg/337/337946.svg

Um es als Preview anzuzeigen muss man die PDF in Grafikdateien wandeln z.B. mit Ghostscript :


string prog = @"\Program Files\gs\gs9.23\bin\gswin64c.exe";
string args = "-sOutputFile='" + zdat + "' -sDEVICE=jpeg -dBATCH -dNOPAUSE -r16 -q '" + qdat + "'";

Grüße Bernd

Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3

3.511 Beiträge seit 2005
vor 5 Jahren

Mittels des Interfaces IPreviewHandler kann man PDF Dateien in der eigenen Anwendung anzeigen. Voraussetzung ist eine Anwendung die ein Preview Handler für PDF Dateien bereitstellt (z.B. Adobe).

"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)

3.825 Beiträge seit 2006
vor 5 Jahren

PDF's anzeigen lassen kann man mit Adobe DLL, PDFSharp, MoonPDF und anderen Tools.

Die Anzeige ist aber sehr langsam, man müsste das mal testen.

Ich werde MoonPDF als PDF Viewer verwenden. Der Autor von MoonPDF ist übrigens hier im Forum aktiv.

Grüße Bernd

Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3