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

    Lettura file da directory

    Salve a tutti!

    Utilizzo un metodo di questo tipo:

    static void Main()
    {

    FileStream streamFile = null;

    // Path dei Files di Input
    string nomeFileInput = ConfigurationSettings.AppSettings["nomeFile"];
    string pathFile = ConfigurationSettings.AppSettings["pathFileInput"] + "\\" + nomeFileInput;

    //// Path dei file di Output
    string pathFileLog = ConfigurationSettings.AppSettings["pathFileOutput"] + "\\" + nomeFileInput + "_LOG.txt";

    // Valorizza il path per il file di output nelle costanti globali.
    // In questo modo i metodi di gestione eccezioni posso scrivere direttamente sul disco.

    // Stream per la scrittura e la lettura
    StreamReader sRead = null;
    StreamWriter sWriteLog = new StreamWriter(pathFileLog, false, Encoding.Default);

    // Apertura del file con il flusso
    streamFile = new FileStream(pathFile, FileMode.Open, FileAccess.Read, FileShare.None);

    while (!streamFile.CanRead) ;

    sRead = new StreamReader(streamFile);

    // Elaborazione Flusso

    ElaborazioneFlusso.ElaboraFlusso(sRead, ref sWriteLog, nomeFileInput);

    // Chiusura dei File
    streamFile.Close();
    streamFile.Dispose();
    streamFile = null;

    sRead.Close();
    sRead.Dispose();
    sRead = null;

    sWriteLog.Close();
    sWriteLog.Dispose();
    sWriteLog = null;

    }

    Tale metodo legge il file nella cartella di Input da me specificato e lo elabora mediante la funzione ElaboraFlusso().

    Domanda:
    Come fare ad 'attivare' tale funzione per tutti i file presenti in una determinata cartella?
    Ovvio ci vuole un ciclo while, ma non saprei che tipo di condizione impostare e neanche come fare in modo che il mio metodo 'punti' a tale cartella...

    Qualcuno può aiutarmi?

    Grazie infinite, come al solito

    VI POSTO ANCHE L'APP.CONFIG:
    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
    <appSettings>
    <add key="nomeFile" value="E202.E202.D2007229.P01.T00"/>
    <add key="pathFileInput" value="C:\Documents and Settings\Fabrizio\Documenti\File Input"/>
    <add key="pathFileOutput" value="C:\Documents and Settings\Fabrizio\Documenti\File Output"/>
    </appSettings>
    </configuration>

  2. #2

  3. #3
    Grazie mille!!

    Funziona!

    Ora però ho un altro problema...
    La mia cartella di input contiene una serie di file di testo multiriga, es.:

    File1.txt:
    A18I892UNJCH83HUDJBC
    G1JIPDC9E4NCN9439IOJC
    G190WU90HFURNWOCN9
    G24HFUHBFUIEBJIBDHKFB
    G5943HFUWHJFCDWBHFF
    Z1U93O08HFUDHBJ9EUFH

    Il Main() contiene 2 funzioni:

    foreach (file F in directory D)
    {
    Funzione1();

    Funzione2();
    }

    Entrambe le funzioni scansionano riga per riga il file...ora accade che uscito dalla Funzione1() il mio file è alla fine e quindi la funzione2, che dovrebbe lavorare sullo stesso file, si trova con una riga vuota...

    Come ricominciare dalla prima riga del file?

  4. #4
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    fai una seek(0) per portarti all'inizio..

  5. #5
    mitico, grazie!


  6. #6
    Grazie!


  7. #7
    E' però ora sorto un altro problema:

    la prima funziona elabora il file per fatti suoi;
    si esce e il seek mi riporta all'inizio
    l'elaborazione entra quindi nella seconda funzione, dove devo creare un file d'appoggio per scrivere alcune righe del primo file solo temporaneamente:

    uso questo codice per creare questo file d'appoggio:

    FileStream streamFileAppoggio = null;

    string pathFileAppoggio = ConfigurationSettings.AppSettings["pathFileAppoggio"] + "\\" + nomeFileInput + "_APPOGGIO.txt";

    StreamReader sReadAppoggio = null;
    StreamWriter sWriteAppoggio = new StreamWriter(pathFileAppoggio, FileMode.Open, FileAccess.Read, FileShare.None);

    proprio qui mi si pianta il programma, poichè mi dice:
    The process cannot access the file 'C\...suopath...\Appoggio\nomefile_APPOGGIO.txt because it is being used by another process.

    Sinceramente non ho altre applicazioni aperte che usano quel file...come mai 'st'errore?

  8. #8
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    prima di creare il nuovo filestream con il path sei certo che la funzione abbia chiuso qualsiasi altro stream collegato al file?

  9. #9
    Beh, credo di si...

    Il file d'appoggio lo creo lì dentro, con il codice indicato...l'unico stream ancora aperto è quello del file che viene passato alla funzione dal main, ma non credo sia lui a creare questo conflitto...

  10. #10
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    un file può essere aperto in lettura da più stream ( ma solo tutti in lettura) se uno stream lo apre in scrittura quel file è inaccessibile agli altri..

    Sincerati che un file sia aperto (usato da uno stream) esclusivamente dallo stream che ti serve e non da altri.. l'errore che hai riportato indica che c'è un altro stream (sicuramente in scrittura) che punta a quel medesimo file..

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.