c# Datei suchen und kopieren

Danke, aber wie geht es dann weiter?
Schlage in der Hilfe bzw. MSDN die oben genannte Klasse nach und schaue dir die Funktion und Verwendung an (dort gibt es auch Beispiele). Dann kannst zu versuchen, für deine konkrete Anwendung eine Implementierung zu bauen. Falls da Probleme gibt, erkläre sie und zeige den betreffenden Code.

Gruß
MCoder
 
Ich habe mich gestern noch eine ganze Weile mit dem Thema beschäftigt und habe es immerhin geschafft eine fest im Quelltext verankerte Datei öffnen zu können. Nun will ich aber, dass ich eine Datei öffnen kann, welche im ListView zuvor markiert wurde. Im Quelltext ist auch ein Contextmenü vorgesehen, aber es erscheint leider nicht. Warum? Das Problem steht in direktem Zusammenhang mit diesem Thread, aber ich poste hier noch einmal das Bild der GUI und den Quelltext, den ich bislang habe.

Code:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Linq;
using System.Windows.Forms;
using System.IO;
using System.Diagnostics;

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

        private void Form1_Load(object sender, EventArgs e)
        {
            cmbLaufwerk.Items.AddRange(Environment.GetLogicalDrives());
        }

        private void cmdSuchen_Click(object sender, EventArgs e)
        {
            listView1.Items.Clear();
            string path = cmbLaufwerk.Text;
            string searchPattern = "*"+txtSuchbegriff.Text+"*";
            try
            {

                DirectoryInfo di = new DirectoryInfo(path);

                FileInfo[] files = di.GetFiles(searchPattern, SearchOption.AllDirectories);



                foreach (FileInfo file in files)
                {
                    progressBar1.Value += 1;
                    if ((file.Name.Contains(txtSuchbegriff.Text)) && (file.Extension == ".doc"))
                    {
                        listView1.Items.Add(file.Name);
                    }
                }
            }
            catch
            {
                MessageBox.Show("Es ist ein Fehler aufgetreten");
            }
        }

        private void dateiToolStripMenuItem_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void überToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Form2 NeuesFenster = new Form2();
            NeuesFenster.ShowDialog();
        }

        private void öffnenToolStripMenuItem1_Click(object sender, EventArgs e)
        {
            Process.Start("WINWORD.exe", "x:\\test.doc");
        }

        private void öffnenToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Process.Start("WINWORD.exe", "x:\\test.doc");
        }
    }
}
 

Anhänge

  • SucheGui.png
    SucheGui.png
    14,7 KB · Aufrufe: 51
Zuletzt bearbeitet:
Hallo,

die ausgewählte Datei bekommst du über die Methode "SelectedItems" des ListView heraus:
C#:
ListView.SelectedListViewItemCollection co =  listView1.SelectedItems;
		
if( co.Count > 0 )
{
    string strFile = co.Item(0).SubItems[0].Text; // Datei
    string strPath = co.Item(0).SubItems[1].Text; // Ort
    
    string strFilePath = Path.Combine(strPath, strFile);
    Process.Start("WINWORD.exe", strFilePath);
}

Zu dem Problem mit dem Kontextmenü kann ich nichts weiter sagen. Da du die entsprechende Funktionalität vermutlich im Form-Designer gebaut hast, erscheint der betreffende Code nicht in deiner geposteten Source.

Gruß
MCoder
 
Danke MCoder. Aber irgendwas scheint mit der Zeile
Code:
string strFile = co.Item(0).SubItems[0].Text; // Datei"
nicht zu stimmen. Das Wort "Item" wird rot unterstrichen. In der Fehlerbeschreibung heißt es dazu
Fehler 1 "System.Windows.Forms.ListView.SelectedListViewItemCollection" enthält keine Definition für "Item", und es konnte keine Erweiterungsmethode "Item" gefunden werden, die ein erstes Argument vom Typ "System.Windows.Forms.ListView.SelectedListViewItemCollection" akzeptiert. (Fehlt eine Using-Direktive oder ein Assemblyverweis?) C:\Users\Memfis\documents\visual studio 2010\Projects\Suche\Suche\Form1.cs 74 37 Suche
Ich habe natürlich geguckt, was nach "co." sonnst noch angeboten wird, aber keiner der angebotenen Dinge macht Sinn. Ich habe noch "co.IndexOf" probiert, aber dann ist direkt alles falsch. Vermutlich fehlt mir die Using-Direktive , aber welche soll das sein?
 
Hallo,

ja, da hat sich bei mir ein Fehler eingeschlichen :eek:

das "Item" ist überflüssig.
C#:
string strFile = co[0].SubItems[0].Text; // Datei"
Gruß
MCoder
 
Hey, danke. Funktioniert prima. Es gab nur ein ganz kleines Problem:

Der Code funktioniert nur, wenn im Dateinamen kein Leerzeichen ist. Sobald sich ein Leerzeichen darin befindet kann die Datei nicht mehr geöffnet werden. Ich habe den Code so abgeändert und nun funktioniert es prima.

Code:
Process.Start("WINWORD.exe", "\"" +strFilePath + "\"");
 
Ja prima! Es sollte reichen, wenn du nur den Dateinamen bei Process.Start übergibst. Das aufzurufende Programm (WINWORD) sollte automatisch ermittelt werden.

Gruß
mbmun
 
Es gab nur ein ganz kleines Problem:
Der Code funktioniert nur, wenn im Dateinamen kein Leerzeichen ist.
Bei mir funktioniert
C#:
System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo(@"C:\Pfad mit Leerzeichen\Testdokument.txt"));
hervorragend.
Welche Fehlermeldung erhälst du bei Pfaden mit Leerzeichen?
 
Hallo
Wenn Du in meine Posts schaust findest Du alles was Dur brauchst für Dein Program. Damit meine ich meine List View Netshare Posts.Dort sind auch viele links.
MfG
 
Zurück