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();
}
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ß
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
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!
Oh jaa stimmt, sorry.. ist verloren gegangen
mache ich normalerweise auch so
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
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.
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ß
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
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)
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