Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1

    [C#] Problema con list directory

    ho creato questa classe:
    codice:
    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.IO;
    
    namespace sharpFtpHell
    {
        class ListFile
        {
            public string scansionaDirectory(string path)
            {
                DirectoryInfo dir = new DirectoryInfo(path);
                string result = "";
                if (path == null || path == "")
                {
                    path = "E:\\";
                }
                FileInfo[] files = dir.GetFiles(path, SearchOption.AllDirectories);
                foreach (FileInfo fi in files)
                {
                    Console.Write(fi.Name);
                }
                result = path + files;
                return result;
            }
        }
    }
    questa deve essere richiamata in un form in modo tale quando clicco sul bottone mi lista tutti i file e directory della dir selezionata.
    la di iniziale è ricavata da una textbox:
    codice:
        public partial class Form1 : Form
        {
            sharpFtpHell.ListFile objFile = new sharpFtpHell.ListFile();
    
            public Form1()
            {
                InitializeComponent();
                txtLocalPath.Text = "E:\\";
            }
    
            private void btnList_Click(object sender, EventArgs e)
            {
                txtLocal.Text = objFile.scansionaDirectory(txtLocalPath.Text);
            }
    ....
    il problema è che al momento del click mi da questo errore:
    codice:
    Non iniziare la seconda parte del percorso con un nome di unità o un nome UNC.
    Nome parametro: path2.
    ci stanno poi tutti i dettagli che però sono lunghi.
    se volete li posto.

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    970
    Se istanzi la variabile dir che e di tipo DirectoryInfo con la directory ad es. C:\ non puoi chiedergli la lista dei file ancora in C:\

    Sbagliare è umano, perseverare è diabolico.

  3. #3
    scusami e allora che dovrei fare?
    cioè, dov'è che sbaglio di preciso??

  4. #4
    Utente di HTML.it L'avatar di albgen
    Registrato dal
    Jun 2005
    Messaggi
    3,249
    prova cosi'
    codice:
    class ListFile
        {
            public string scansionaDirectory(string path)
            {
                if (path == null || path == "")
                {
                    path = "E:\\";
                }
                DirectoryInfo dir = new DirectoryInfo(path);
                string result = "";
               
                FileInfo[] files = dir.GetFiles();
                foreach (FileInfo fi in files)
                {
                    Console.Write(fi.Name);
                }
                result = path + files;
                return result;
            }
        }
    I got the remedy

  5. #5
    mi da un risultato strano:
    E:\System.IO.FileInfo[]

    come se nn leggesse le info.

  6. #6
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    970
    Per forza hai creato una funzione che ti restituisce una stringa singola e tu hai bisogno che ti ritorni una lista di stringhe e in aggiunta hai valorizzato una variabile stringa con una matrice di stringhe.

    codice:
     result = path + files;
    result è una stringa.
    path è una stringa.

    files è invece una matrice di stringhe.

    codice:
    FileInfo[] files = dir.GetFiles();
    per cui la variabile result risulta essere:

    codice:
     result = path + files.ToString ();
    Sbagliare è umano, perseverare è diabolico.

  7. #7
    sicuramente sbaglio ma nn penso che il ToString() sia fondamentale.
    infatti mi da lo stesso errore.

    nn potrebbe essere il fatto che il result sta fuori dal ciclo?
    ho provato a creare un ciclo for del genere:
    codice:
    class ListFile
        {
            public string scansionaDirectory(string path)
            {
                if (path == null || path == "")
                {
                    path = "E:\\";
                }
                DirectoryInfo dir = new DirectoryInfo(path);
                string result = "";
                FileInfo[] files = dir.GetFiles();
                for (int i = 0; i < files[i].Length; i++)
                {
                    result = path + files;
                }  
                return result;
            }
        }
    ma mi da un errore di Indici fuori dalla matrice.

  8. #8
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    970
    Il .ToString() è ovvio che non risolve il tuo problema era solo per farti capire come mai ti viene fuori quel risultato: E:\System.IO.FileInfo[], per cui scrivere:

    codice:
    result = path + files;
    o

    codice:
    result = path + files.ToString ();
    è lo stesso perchè NON puoi valorizzare una variabile stringa con una matrice di stringhe.

    Per cui per risolvere in maniera veloce puoi scrivere:

    codice:
      public void scansionaDirectory(string path)
            {
                if (path == null || path == "")
                {
                    path = "E:\\";
                }
                DirectoryInfo dir = new DirectoryInfo(path);
             
                FileInfo[] files = dir.GetFiles();
                foreach (FileInfo fi in files)
                {
                    listBox1.Items.Add(path + fi.Name);
                }
            }
    e hai la tua Lista di File, ma potrebbe non andar bene per i tuoi scopi.
    Sbagliare è umano, perseverare è diabolico.

  9. #9
    Originariamente inviato da Pirelli72
    Il .ToString() è ovvio che non risolve il tuo problema era solo per farti capire come mai ti viene fuori quel risultato: E:\System.IO.FileInfo[], per cui scrivere:

    codice:
    result = path + files;
    o

    codice:
    result = path + files.ToString ();
    è lo stesso perchè NON puoi valorizzare una variabile stringa con una matrice di stringhe.

    Per cui per risolvere in maniera veloce puoi scrivere:

    codice:
      public void scansionaDirectory(string path)
            {
                if (path == null || path == "")
                {
                    path = "E:\\";
                }
                DirectoryInfo dir = new DirectoryInfo(path);
             
                FileInfo[] files = dir.GetFiles();
                foreach (FileInfo fi in files)
                {
                    listBox1.Items.Add(path + fi.Name);
                }
            }
    e hai la tua Lista di File, ma potrebbe non andar bene per i tuoi scopi.
    questo codice però dovrei metterlo nel form direttamente giusto?

  10. #10
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    970
    Si esatto, per quello che ti dicevo prima potrebbe non andare bene.

    Se la tua necessità è quella di incorporare la tua funzione in una classe allora potresti scrivere:

    codice:
     public List<string> scansionaDirectory(string path)
            {
                List<string> myList = new List<string>();
                DirectoryInfo dir = new DirectoryInfo(path);
                string result = "";
                if (path == null || string.IsNullOrEmpty(path))
                {
                    path = "E:\\";
                }
                FileInfo[] files = dir.GetFiles();
                foreach (FileInfo fi in files)
                {
                    myList.Add(string.Concat(path, fi.Name));
                }
                return myList;
            }
    e poi richiamare dalla Form:

    codice:
    List<string> myList = null;
                myList = scansionaDirectory("C:\\");
    Come puoi vedere, siccome è un esempio, non ho creato l'istanza di nessuna classe.
    Sbagliare è umano, perseverare è diabolico.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.