Operazioni con file

venerdì 22 febbraio 2008 - 15.37

liveforever81 Profilo | Junior Member

Salve a tutti!

Ho dei problemi con le operazioni su file (sto cominciando ad odiare gli stream...).

Ho un'applicazione che legge dal fileA.txt:

ho creato lo streamreader e fa i fatti suoi...

Poi ho la necessità di creare un file d'appoggio, il quale viene, in maniera del tutto 'asincrona', aperto per potervi leggere sopra e successivamente, dopo altre iterazioni, bisogna leggere il contenuto (sono stringhe di testo...)

Come catanazzo posso evitare che mi compaia l'errore:
Il file XXXXX è già in uso da un altro processo?

Devo aprire e chiudere il file ogni volta che ci scrivo sopra altrimenti va in conflitto?

alx_81 Profilo | Guru

>Salve a tutti!
Ciao!

>Devo aprire e chiudere il file ogni volta che ci scrivo sopra altrimenti va in conflitto?
Puoi decidere il tipo di accesso sul file quando lo scrivi:

metodo statico:
System.IO.File.Open("path", IO.FileMode.Open, IO.FileAccess.Write, IO.FileShare.Read)

metodo non statico:
Dim f As New System.IO.FileInfo("path") f.Open(IO.FileMode.Open, IO.FileAccess.Write, IO.FileShare.Read)

in questo modo dovresti poter leggere la versione del file precedente all'ultima apertura non ancora chiusa..

Alx81 =)

http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

liveforever81 Profilo | Junior Member

hem...

ho fatto una gaffe...

sto scrivendo in C#

alx_81 Profilo | Guru

>hem...
>
>ho fatto una gaffe...
>
>sto scrivendo in C#
Non ci sono problemi, è uguale, cambia solo la sintassi
System.IO.FileInfo f = new System.IO.FileInfo(path); f.Open(IO.FileMode.Open, IO.FileAccess.Write, IO.FileShare.Read);

oppure

System.IO.File.Open(path, IO.FileMode.Open, IO.FileAccess.Write, IO.FileShare.Read);



Alx81 =)

http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

liveforever81 Profilo | Junior Member

Dove sbaglio?


using System;
using System.IO;
using System.Configuration;
using System.Text;

namespace testofile
{
public class TextToFile
{
private const string FILE_NAME = "MyFile.txt";
public static void Main(String[] args)
{
string CartellaFileAppoggio = ConfigurationSettings.AppSettings["pathFile"] + "\\" + FILE_NAME;

FileStream fs=new FileStream(CartellaFileAppoggio, FileMode.Open, FileAccess.ReadWrite, FileShare.None);

StreamWriter sw = new StreamWriter(fs);

sw.WriteLine("scrittura 1");
sw.Close();

StreamReader sr = new StreamReader(fs);

string lettura = sr.ReadLine();

sr.Close();


}
}
}

Arrivato allo StreamReader mi dice: FLUSSO ILLEGGIBILE...perchè?

:S

Cmq la mia applicazione sarà così: in maniera dinamica devo aprire il file, scriverci su, chiuderlo e poi leggerlo...ma ora quest'errore mi disarma!


alx_81 Profilo | Guru

>Dove sbaglio?
>Arrivato allo StreamReader mi dice: FLUSSO ILLEGGIBILE...perchè?
perchè il filestream è ancora aperto con lo stream writer. Utilizza l'istruzione using:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

l'istruzione using, rilascia automaticamente le risorse. In poche parole, per ripetere la lettura, dovresti chiudere il filestream.
In alternativa, puoi decidere di non usare un filestream ma di aprire gli streamreader e writer direttamente col path.
leggiti questo link per la using:
http://msdn2.microsoft.com/it-it/library/yh598w02(VS.80).aspx

e per la path.combine:
http://msdn2.microsoft.com/it-it/library/system.io.path.combine(VS.80).aspx

ciao!
Alx81 =)

http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

liveforever81 Profilo | Junior Member

Ma tu sei un grande!!!

GRAZIE!!

Ultima cosa e poi mi eclisso, giuro:

Come cancellare l'intero contenuto del file senza, ovviamente, cancellare il file stesso?

alx_81 Profilo | Guru

>GRAZIE!!
di nulla!
>
>Come cancellare l'intero contenuto del file senza, ovviamente, cancellare il file stesso?

Basta indicare che il metodo di accesso al file è TRUNCATE
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Alx81 =)

http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

liveforever81 Profilo | Junior Member

uhm...

2 cose:

1- Uso sempre il C#;
2- L'operazione di cancellazione del contenuto del file devo eseguirla dopo tante altre operazioni che scrivono su esso...non esiste un metodo tipo Clear() che ti fa la cosa in immediato (poichè successivamente dovrò riaprire il file, riscriverci dentro e poi cancellarne di nuovo il contenuto...)

alx_81 Profilo | Guru

>uhm...
>
>2 cose:
>
>1- Uso sempre il C#;
Dai è facile da tradurre
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

>2- L'operazione di cancellazione del contenuto del file devo
>eseguirla dopo tante altre operazioni che scrivono su esso...non
>esiste un metodo tipo Clear() che ti fa la cosa in immediato
>(poichè successivamente dovrò riaprire il file, riscriverci dentro
>e poi cancellarne di nuovo il contenuto...)
Che io sappia un metodo non esiste anche perchè in effetti mi verrebbe da cancellarlo a priori..
Però con l'istruzione che ti ho passato, usando la using, apri il file troncandolo prima di scrivere. Maglio di così non trovi?

Alx81 =)

http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

liveforever81 Profilo | Junior Member

...hai una cena pagata!

^_^

alx_81 Profilo | Guru

>...hai una cena pagata!
seeeeee!
Alx81 =)

http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5