Avatar billede slapstick Nybegynder
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?
Avatar billede sirerugor Nybegynder
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
}
Avatar billede sirerugor Nybegynder
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();
}
Avatar billede slapstick Nybegynder
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
Avatar billede slapstick Nybegynder
04. november 2008 - 19:14 #4
ah så ik dit andet svar før jeg havde skreve tkommentaren hehe
Avatar billede slapstick Nybegynder
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();
            }
Avatar billede sirerugor Nybegynder
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#.
Avatar billede sirerugor Nybegynder
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();
            }
Avatar billede slapstick Nybegynder
04. november 2008 - 19:40 #8
hmm der sker det samme..
sqlite database filen er malformed og er vokset 1kb
Avatar billede sirerugor Nybegynder
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.
Avatar billede sirerugor Nybegynder
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);
        }
    }   
}
Avatar billede sirerugor Nybegynder
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);
        }
    } 
}
Avatar billede slapstick Nybegynder
04. november 2008 - 20:40 #12
SÅ spiller det!
smukt mange tak ska du ha :o)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester