273 messaggi dal 01 aprile 2004
DiskFileDestinationOptions DF = new DiskFileDestinationOptions();

string Numero = "0000000000" + txtNmOrdi.Text;
string Name = Request.PhysicalApplicationPath + "PDF\\ORDINE_CLIENTE\\" + txtAnOrdi.Text.Trim() + "_" + Numero.Substring(Numero.Length - 10, 10).Trim() + "_" + txtCdClie.Text.Trim() + ".PDF";
Modificato da marcodonza il 24 ottobre 2008 10.08 -
Modificato da marcodonza il 24 ottobre 2008 10.13 -

Ciao,
DNZ
Ciao,

premetto che non conosco la libreria che usi per generare PDF, però ti do qualche consiglio per provare a risolvere il problema:

1) Prima di incolpare del lock la generazione della library, prova a commentare il codice da
FileInfo file = new FileInfo(Name);

in poi. La pagina sarà vuota, ma il problema del salvataggio si verifica lo stesso?
2) In particolare, cosa istanzi a fare il FileInfo se non lo usi?
3) Ammesso e non concesso che ci sia un bug in objRepDOC che non rilascia l'handler del file nella Dispose, hai verificato se esiste un overload del costruttore, del salvataggio o di qualsiasi altra cosa che accetti uno stream, permettendoti pertanto di occuparti tu in prima persona dell'apertura (e chiusura) del file?
4) Come ti ha consigliato Daniele, utilizza il costrutto using, altrimenti al primo errore rischi di trovare il file lockato fino all'arrivo del Garbage Collector.

Let me know,
m.
273 messaggi dal 01 aprile 2004
ho provato anche in questo modo, con lo stream ...
la prima volta che salvo crea il file ed è OK, se rifaccio immediatamente la creazione del file oppure tento di cancellarlo mi dice sempre che è in uso !!!!

DiskFileDestinationOptions DF = new DiskFileDestinationOptions();
DF.DiskFileName = Name;

objRepDOC.ExportOptions.DestinationOptions = DF;
objRepDOC.ExportOptions.ExportDestinationType = ExportDestinationType.DiskFile;
objRepDOC.ExportOptions.ExportFormatType = ExportFormatType.PortableDocFormat;

System.IO.Stream s = objRepDOC.ExportToStream(ExportFormatType.PortableDocFormat);
byte[] b = new byte[s.Length];
s.Read(b,0,int.Parse(s.Length.ToString())-1);

System.IO.FileStream w = new System.IO.FileStream(Name,System.IO.FileMode.Create);
w.Write(b,0,int.Parse(s.Length.ToString())-1);
w.Flush();
w.Close();
w.Dispose();
s.Close();
w = null;
s = null;
objRepDOC.Dispose();
objRepDOC.Close();

Ciao,
DNZ
Qui sembra che rilasci tutto, ma perchè non usi le using???.. Anyway, non hai altro codice che viene eseguito? se ad es. crei una consoleapp con il codice che hai postato (avendo cura di eseguirlo due volte) riesci a riprodurre il problema?
marcodonza wrote:
DiskFileDestinationOptions DF = new DiskFileDestinationOptions();

e sicuro che non abbia un metodo Dispose()?
inoltre, non è che magari apri in qualche modo il file, dopo, e non chiudi l'eventuale file handler?

Daniele Bochicchio | ASPItalia.com | Libri
Chief Operating Officer@iCubed
Microsoft Regional Director & MVP
273 messaggi dal 01 aprile 2004
C'è una cosa che non vi ho detto ...

Nella mia pagina c'è del codice ajax con degli UpdatePanel...non è che c'entra qualcosa ?

Ho provato a fare le stesse istruzioni in ultra pagina senza ajax e non mi da il problema del file in uso, lo riesco a cancellare immediatamente.

Ciao,
DNZ
marcodonza wrote:
Nella mia pagina c'è del codice ajax con degli UpdatePanel...non è che c'entra qualcosa ?

è possibile. ancora una volta: dipende da tutto quello che c'è intorno, senza saperlo è difficile dirlo. ma non puoi ovviamente neanche postare tutto il codice, perchè c'avrebbe poco senso: dovresti concentrarti sul capire dove è possibile che qualcosa non venga chiuso ed usando using secondo me sei a metà dell'opera.

Daniele Bochicchio | ASPItalia.com | Libri
Chief Operating Officer@iCubed
Microsoft Regional Director & MVP
273 messaggi dal 01 aprile 2004
Mi sono deciso ad usare le using, perchè devo per forza risolvere il problema, ho fatto in quesot modo :

try
{
Response.Cache.SetNoStore();

using (ReportDocument objRepDOC = new ReportDocument())
{
... codice
}


va bene?

devo farlo su tutti gli oggetti?

per DiskFileDestinationOptions e ExportOptions ??

Ciao,
DNZ

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.