webForumDet fria alternativet

Hur hantera filer på bästa sätt?

.NET

9 svar · 478 visningar · startad av CatZ

Medlem sedan jan. 20022 440 inlägg
Frågan#1

Jag använder CrystalReports för att generera order i pdf format. Det funkar fantastiskt bra. Nu vill jag kunna emaila pdf filen till diverse företag eftersom vissa verkar föredra att få sina order på det viset! Problemet blir att då måste jag skapa pdf filen fysiskt. Sedan när mailet är skickat så ska jag tabort pdf filen och får då att System.IO.IOException Bummer with the access!

Försöker med IO.File.Delete(strFileName)

Ibland är det webläsaren som låser pdf filen och ibland verkar det vara Visual Studio 2005 som låser filen. Några tips på hur man ska göra? Ska jag skapa någon form av funktion som tar bort gamla pdf filer innan användaren skapar och emailar en ny?

Några förslag? Känner mig lite vilsen :)

Medlem sedan jan. 20022 440 inlägg
#2
		Private Sub EmptyTemp()
			Dim temp As String = "C:\Inetpub\root\temp\"

			Dim files() As String = Directory.GetFiles(temp)
			Dim f As String

			For Each f In files
				Dim filename As String = Path.GetFileName(f)
				If File.Exists(filename) = True Then
					File.Delete(filename)
				End If
			Next
		End Sub

Den här funktionen gör ju ingenting!? Hur ska jag kunna loopa igenom alla filer i en mapp och ta bort dom??

Medlem sedan jan. 20022 440 inlägg
#3
Sub Page_Load()
	grid1.DataSource = System.IO.Directory.GetFiles("C:\Inetpub\root\temp")
	grid1.DataBind()
End Sub
<asp:DataGrid
  ID="grid1"
  Cellpadding="10"
  Runat="Server" />

Den koden fungerar! Nu ska jag försöka ta bort filerna också :)

Medlem sedan dec. 19996 721 inlägg
#4

Jag skulle nog hellre försöka se till att det aldrig skapas någon fil, om det är tillämpligt i ditt fall. Använd ExportToStream på Crystal-rapporten och någon av stream-konstruktorerna på Attachment.

Medlem sedan jan. 20022 440 inlägg
#5

Ska man eposta en pdf fil måste den väl skapas först? Ska kolla på vad du sa imorn. Klockan är 2 am här snart! :D

Medlem sedan dec. 19996 721 inlägg
#6

CatZ skrev:

Ska man eposta en pdf fil måste den väl skapas först?

Ja, men den behöver aldrig lagras fysiskt.

Medlem sedan maj 20012 812 inlägg
#7

Precis som emisson säger så är din file endast en bytearray som finns i minnet. Så om du skapar en pdf-fil i kod eller om du läser upp den från disken så ser den likadan ut i minnet, så det du vill är att skicka denna bytearray till attachment i ditt mail.

- M

Medlem sedan jan. 20022 440 inlägg
#8
Dim strStream As New System.IO.BinaryReader( crReportDocument.ExportToStream( CrystalDecisions.[Shared].ExportFormatType.PortableDocFormat ) )

' Create the output pdf file
Response.ClearContent()
Response.ClearHeaders()
Response.ContentType = "application/pdf"
Response.BinaryWrite(strStream.ReadBytes(strStream.BaseStream.Length))
Response.Flush()
Response.Close()

Det där ska väl fungera, men hur tusan hämtar jag den här till mitt email attachment nu då?

Medlem sedan dec. 19996 721 inlägg
#9

emission skrev:

Använd ExportToStream på Crystal-rapporten och någon av stream-konstruktorerna på Attachment.

http://msdn2.microsoft.com/en-us/library/k5zs6xxh(vs.80).aspx

Medlem sedan jan. 20022 440 inlägg
#10

Tack emission! Mitt problem just nu är att jag inte är så avancerad att jag klarar att ta till mig av MSDN's dokumentation av asp.net än. ASP går bra nu men det hjälper ju inte mig ;)

Jag har för närvarande 3 funktioner. En för när användaren klickar på skicka epost en för att hämta pdf filen och en för att slutligen skicka epostmeddelandet!

  • onClick_Send
  • pdfToStream
  • emailOrder

Just nu fattar jag inte hur jag ska få ihop det. Förut hämtade jag filnamnet och skickade det vidare med:

' Create the PDF order
strFileName = myutils.PdfToStream(Request.QueryString("OrderId"))
' Email the order
myResult = myutils.EmailOrder(Me.txtTo.Text, Me.txtFrom.Text, Me.txtSubject.Text, Me.txtMessage.Text, strFileName)

Istället för måste jag ju bygga ihop filen då? Jag har ju redan skapat en stream men hur ska man sätta ihop det till en fil?

249 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
121 ms — deklarationer (db)
0 ms — hämta statistik (cache)
126 ms — hämta tråd, inlägg och bilagor (db)
121 ms — ändringar (db)