04. november 2008 - 18:51
Der er
7 kommentarer og 5 løsninger
Problem med embedded resource fil
jeg har embedded en sqlite database og mit program skal ved opstart checke om den er i app folderen og hvis ikke skal den oprette filen jeg har fået den til at skrive den ud men den smadrer sqlite databasen.. når jeg putter filen ind i resources så fylder den 6kb men når jeg har hevet den ud igen og lagt på disken fylder den 7kb og virker ikke.. min kode er her: StreamWriter writer = new StreamWriter(Application.StartupPath + "\\" + "contacts.db3"); System.IO.StreamReader dbStream = new System.IO.StreamReader(System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream("PhoneBook.Resources.contacts.db3")); string dbFile = dbStream.ReadToEnd(); writer.Write(dbFile); writer.Close(); er der nogen der kan sige mig hvorfor det går galt?
Annonceindlæg fra Infor
04. november 2008 - 19:07
#1
Gør således: import java.io.File; .. File file = new File(Application.StartupPath + "\\" + "contacts.db3"); if(file.exists() && file.canRead()) { // gør hvad du skal }
04. november 2008 - 19:13
#2
Ups.. Misforstod hva du ville gøre. :p import java.io.File; .. File file = new File(Application.StartupPath + "\\" + "contacts.db3"); if(!file.exists()) { StreamWriter writer = new StreamWriter(Application.StartupPath + "\\" + "contacts.db3"); System.IO.StreamReader dbStream = new System.IO.StreamReader(System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream("PhoneBook.Resources.contacts.db3")); string dbFile = dbStream.ReadToEnd(); writer.Write(dbFile); writer.Close(); }
04. november 2008 - 19:13
#3
jeg kan ikke se hvordan det sku hjælpe? filen findes jo tydeligvis og den kan sagtens skrive til den
04. november 2008 - 19:14
#4
ah så ik dit andet svar før jeg havde skreve tkommentaren hehe
04. november 2008 - 19:16
#5
men det er ikke i at checke om filen eksisterer problemet ligger der går noget galt når den skriver filen hele koden er her: if(!File.Exists(Application.StartupPath + "\\" + "contacts.db3")) { StreamWriter writer = new StreamWriter(Application.StartupPath + "\\" + "contacts.db3"); System.IO.StreamReader dbStream = new System.IO.StreamReader(System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream("PhoneBook.Resources.contacts.db3")); string dbFile = dbStream.ReadToEnd(); writer.Write(dbFile); writer.Close(); }
04. november 2008 - 19:32
#6
Hvad er det dog jeg laver. Gav dig et svar i Java... Finder lige det du skal bruge i C#.
04. november 2008 - 19:36
#7
Dette skulle fungere: if(!File.Exists(Application.StartupPath + "\\" + "contacts.db3")) { System.IO.StreamReader dbStream = new System.IO.StreamReader(System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream("PhoneBook.Resources.contacts.db3")); string dbFile = dbStream.ReadToEnd(); TextWriter tw = new StreamWriter(Application.StartupPath + "\\" + "contacts.db3"); tw.WriteLine(dbFile); tw.Close(); }
04. november 2008 - 19:40
#8
hmm der sker det samme.. sqlite database filen er malformed og er vokset 1kb
04. november 2008 - 19:42
#9
Er det ikke muligt at læse PhoneBook fra en mere direkte sti? Ellers så skal den stream skrives direkte til output-filen. Kigger lige på det.
04. november 2008 - 19:50
#10
Prøv det her :) if(!File.Exists(Application.StartupPath + "\\" + "contacts.db3")) { Stream stream = new System.IO.StreamReader(System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream("PhoneBook.Resources.contacts.db3")); using (Stream output = new FileStream(Application.StartupPath + "\\" + "contacts.db3"))) { byte[] buffer = new byte[32*1024]; int read; while ( (read=stream.Read(buffer, 0, buffer.Length)) > 0) { output.Write(buffer, 0, read); } } }
04. november 2008 - 19:51
#11
Argh.. det går godt :) if(!File.Exists(Application.StartupPath + "\\" + "contacts.db3")) { Stream stream = System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream("PhoneBook.Resources.contacts.db3"); using (Stream output = new FileStream(Application.StartupPath + "\\" + "contacts.db3"))) { byte[] buffer = new byte[32*1024]; int read; while ( (read=stream.Read(buffer, 0, buffer.Length)) > 0) { output.Write(buffer, 0, read); } } }
04. november 2008 - 20:40
#12
SÅ spiller det! smukt mange tak ska du ha :o)
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.