Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2008
    Messaggi
    68

    [C#] File.Copy: convertire array in string

    Sono bloccato da più di un'ora su un problema apparentemente banale.
    Devo passare alla funzione File.Copy una stringa che indica il percorso di destinazione della copia di un file. Questo percorso varia ad ogni iterazione di un while (c'è una funzione apposita che crea il percorso ad ogni iterazione), ma non è questo il punto. Il problema è che il percorso viene salvato (per comodità) in un arraylist. Mi servirebbe convertire l'arraylist in una stringa pura (non un array di stringhe). Prima di tutto ho pensato di convertire tale arraylist in una array di stringhe con il seguente comando:

    codice:
    string[] pathFinale = (string[])path.ToArray(typeof(string));
    dove pathFinale DOVREBBE ESSERE il percorso che passerò a File.Copy, mentre path è il percorso memorizzato nell'arraylist. Ora, in realtà pathFinale è un array di stringhe. A me servirebbe convertirlo in un tipo string puro. Le ho provate di tutte: cast, funzioni del .NET e tanto altro, ma ancora non ho trovato una soluzione funzionante. Avevo provato anche con questo metodo:

    codice:
    string pathFinale2 = new string(pathFinale);
    Ma ovviamente il compilatore dà errore perchè posso passare alla nuova istanza solo un array di char.

    Avete idee su come risolvere il problema? Grazie per eventuali risposte

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    970
    Mi servirebbe convertire l'arraylist in una stringa pura...
    Mi sembra proprio una cosa impossibile fare una conversione di tale tipo. Forse intendi come convertire ogni Item dell'arraylist in una stringa, no?

    codice:
    string myPath = null;
    ArrayList pathlist = new ArrayList();
    myPath = Convert.ToString(pathlist.Item(0));
    Sbagliare è umano, perseverare è diabolico.

  3. #3
    Allora, tocca capire il problema.

    Primo, l'Arraylist iniziale contiene una lista di percorsi o una lista che unita in una stringa compone il percorso?

    Ipotesi, la lista contiene tanti elementi che compongono il percorso.

    Soluzione 1.

    Scommetto che è passata a riga di comando, i percorsi con spazio passati a riga di comando vanno passati fra doppio apice, es. "C:\Programs Fiels\Pippo.txt"

    In questo modo non si porrà più il problema.


    Soluzione 2.

    Tu sei arrivato fino a questo punto:

    string[] pathFinale = (string[])path.ToArray(typeof(string));

    Il passo successivo è

    string pathFinale2 = String.Join("", pathFinale);

    Ovviamente puoi mettere come primo argomento quello che vuoi.

    Ciao

  4. #4
    Utente di HTML.it
    Registrato dal
    Nov 2008
    Messaggi
    68
    Ringrazio entrambi per la risposta, alla fine ho risolto in questo modo:

    codice:
    string[] pathFinale = (string[])path.ToArray(typeof(string));
    pathFinale2 = Converti(pathFinale);
    codice:
    public string Converti(string[] array)
            {
                StringBuilder builder = new StringBuilder();
                foreach (string value in array)
                {
                    builder.Append(value);
                }
                return builder.ToString();
            }

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    970
    Devo ancora capire per quale motivo devi prima traformarmare in un array di tipo string.
    :master:
    Sbagliare è umano, perseverare è diabolico.

  6. #6
    Utente di HTML.it
    Registrato dal
    Nov 2008
    Messaggi
    68
    Mmh forse perchè il comando .ToArray trasforma solo in array, dopodichè ho pensato a quella soluzione per trasformare l'array in uno string puro. E' la prima soluzione che ho pensato, e visto che funziona non mi sono posto ulteriori problemi

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2010
    Messaggi
    48
    tu vuoi ottenere una stringa accodando tutti gli elementi dell'array?

  8. #8
    Utente di HTML.it
    Registrato dal
    May 2010
    Messaggi
    48
    per non usare lo stringbuilder potevi fare anche più semplicemente così:

    codice:
    public string Converti(string[] array)
            {
                string ris = ""; 
                for (int i = 0; i <= array.Length - 1; i++)
                {
                    ris += array[i];
                }
                return ris;
            }

  9. #9
    Potrei sembrare ridondante (passatemi il termine visto l'ambito ) ma vorrei farvi notare che in un linguaggio di così alto livello come il C# è sempre meglio prima usare quello che la natura (del C#) ci da.

    Per concatenare un array di stringe in una stringa non serve farsi funzioni in casa, già c'è:

    codice:
    string[] str = new string[3] { "A", "B", "C" };
    string concat = string.Join("", str);
    //concat -> "ABC"
    In genere è meglio utilizzare se possibile metodi e strumenti offerti dall'ambiente perché sicuramente più performanti di soluzioni fatte in casa.

    Per nulla togliere all'ingengo personale ma sarebbe come costruirsi una bicicletta in legno quando già te ne viene offerta una avveniristica compresa nel prezzo

  10. #10
    Utente di HTML.it
    Registrato dal
    May 2010
    Messaggi
    48
    è sempre meglio prima usare quello che la natura (del C#) ci da.
    la funzione join della classe system.string non è una funzione dello c# ma del .net framework
    e poi non è detto che una funzione già fatta sia la più ottimizzata. Una funzione già fatta potrebbe contenere al suo interno istruzioni in più rispetto a quelle che servono nello specifico.

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 © 2025 vBulletin Solutions, Inc. All rights reserved.