» »

[c#] shrani text, tabele, slike

[c#] shrani text, tabele, slike

japol ::

Kako se praviloma shranjuje text s slikami, tabelami,...? Kakšne so možnosti? Ne morem ravno shraniti v .doc, prav tako ne, da shranim tekst v .txt obliki, slike pa v .jpg in potem se za vsako shranitev ustvari mapa v kateri so .txt in .jpg-ji.

darkolord ::

V kakšni obliki pa imaš to pred shranjevanjem?

japol ::

Iz textboxov, datagridview in slike iz pictureboxa želim shraniti v en fajl.

DuleKrtola ::

Za tabele csv, mogoče xml? Mogoče celo kar html... :)

noraguta ::

cvs ne bo šlo prov easy, html tud ne. uporab xml al pa celo json serializacijo.(sam bi najprej probal slednjo).
Pust' ot pobyedy k pobyedye vyedyot!

KrEn1234 ::

Zakaj pa ne shranjuješ tega preprosto v bazi? Poleg široke izbire open-source db ima celo MS dve zastonjski različice MS SQL. Ena je celo v datotečni obliki, in si celo namestitev prihraniš.

Če pa res potrebuješ datoteko, naredi novi DTO z vsemi potrebnimi property(string za besedilo, byte[] slika). Dodaj mu potrebne atribute(npr Serializable). Nato ga serializiraj in ga zapiši na disk.

Zgodovina sprememb…

  • spremenil: KrEn1234 ()

japol ::

Tako je, mislil sem nekaj v tej smeri:

serializacija: http://www.switchonthecode.com/tutorial...
ali
base64: http://www.dailycoding.com/Posts/conver...

KrEn1234 ::

Če bi rad to delal masovno, se ti splača poiskati kakšen xsd 2 code mapper.
Nekoč sta se množično uporabljala xsd.exe in xsd2code(http://xsd2code.codeplex.com/). Verjamem pa, da obstoja tudi kaj bolj modernega,..

japol ::

Če prav razumem je potek tak:

image pretvorim v bytearray, nato memorystream, potem preberem z binaryreaderjem in vse te byte zapišem v npr. beležnico.

A to drži?

darkolord ::

To lahko vse v enem koraku naredi. V kateri obliki imaš sliko? Bitmap, Image?

noraguta ::

ma sej je vseen imgge daš u bytearray pa embedaš v serializator kot base64 string.
evo ti še en soliden serializator. ker xsd ma kulkr se spomnem probleme z polimorfizmom. ti maš pa datagrid.
Pust' ot pobyedy k pobyedye vyedyot!

japol ::

primer imam:
            SaveFileDialog saveFile1 = new SaveFileDialog();

            saveFile1.DefaultExt = "*.txt";
            saveFile1.Filter = "txt Files|*.txt";
            if (saveFile1.ShowDialog() == System.Windows.Forms.DialogResult.OK &&saveFile1.FileName.Length > 0)
            {
                StreamWriter sw = new StreamWriter(saveFile1.FileName);
               try
                {
                    byte[] file = File.ReadAllBytes(@"D:\\Programiranje\\Shrani sliko kot tekst\\testnaslika.jpg");
                    using (MemoryStream memory = new MemoryStream(file))
                    {
                        using (BinaryReader reader = new BinaryReader(memory))
                        {
                            for (int i = 0; i < file.Length; i++)
                            {
                                byte result = reader.ReadByte();
                                sw.Write(result); 
                            } 
                        }
                    }
                }
                catch
                {
                    MessageBox.Show("Ne morem shraniti dokumenta!");
                }

            }


le da bo slika iz: Image image = pictureBox1.Image;
nekako jo moram pretvoriti.
Kak primer kode bi bil dobrodošel....
Če lahk, daj primer kode z uporabo: Image image = pictureBox1.Image;

p.s. sem se sploh pravilno lotil tega? Kako to programerji pravilno delajo?

darkolord ::

Image image = pictureBox1.Image;
image.Save(safeFile1.FileName);

japol ::

Sem razmišljaj tudi v tej smeri da bi sliko shranil na disk in jo potem pretovril in originalno sliko izbrisal. Ampak se temu želim ogniti.

noraguta ::

eh ne kompiliceri posebej z linkanjem. http://www.dailycoding.com/Posts/conver...
pa embedaš img lepo v xml al pa jdom dokument pa je.
Pust' ot pobyedy k pobyedye vyedyot!

japol ::

Točno ta primer sem uporabil, ampak ne dela ko želim iz string nazaj v image.
Shranil sem sliko s StreamWriter v .txt datoteko z .write. In s streamreaderjem želim prebrati ta tekst in nazaj sestaviti sliko.

OpenFileDialog openFile1 = new OpenFileDialog();
            openFile1.DefaultExt = "*.txt";
            openFile1.Filter = "txt Files|*.txt";

            if (openFile1.ShowDialog() == System.Windows.Forms.DialogResult.OK && openFile1.FileName.Length > 0)
            {
                StreamReader sw = new StreamReader(openFile1.FileName);
                string base64String = sw.ToString();
                byte[] imageBytes = Convert.FromBase64String(base64String);
                MemoryStream ms = new MemoryStream(imageBytes, 0, imageBytes.Length);
                ms.Write(imageBytes, 0, imageBytes.Length);
                Image image = Image.FromStream(ms, true);
                pictureBox2.Image = image;
            }


napaka: je v vrstici: byte[] imageBytes = Convert.FromBase64String(base64String);
Invalid character in a Base-64 string.

darkolord ::

Kako jo pa shraniš?

noraguta ::

japol je izjavil:

Točno ta primer sem uporabil, ampak ne dela ko želim iz string nazaj v image.
Shranil sem sliko s StreamWriter v .txt datoteko z .write. In s streamreaderjem želim prebrati ta tekst in nazaj sestaviti sliko.


OpenFileDialog openFile1 = new OpenFileDialog();
openFile1.DefaultExt = "*.txt";
openFile1.Filter = "txt Files|*.txt";

if (openFile1.ShowDialog() == System.Windows.Forms.DialogResult.OK && openFile1.FileName.Length > 0)
{
StreamReader sw = new StreamReader(openFile1.FileName);
string base64String = sw.ToString();
byte[] imageBytes = Convert.FromBase64String(base64String);
MemoryStream ms = new MemoryStream(imageBytes, 0, imageBytes.Length);
ms.Write(imageBytes, 0, imageBytes.Length);
Image image = Image.FromStream(ms, true);
pictureBox2.Image = image;
}


napaka: je v vrstici: byte[] imageBytes = Convert.FromBase64String(base64String);
Invalid character in a Base-64 string.

tkole se da bolj težko pomagat. lahko da se kaj sfriži že pri serializaciji.
Pust' ot pobyedy k pobyedye vyedyot!

japol ::

Mi je uspelo, moral bi pisati: string base64String = sw.ReadToEnd(); da prebere celotni string.
Poskušal bom še z BinaryReaderjem.

noraguta ::

če ti dela se raš lot datagrida tm zna bit še pestro.
Pust' ot pobyedy k pobyedye vyedyot!

japol ::

Ko poskušam shraniti, mi naredi datoteko vendar je prazna (gre za .txt). Nič ne zapiše vanjo. Kaj je narobe s to kodo?
StreamWriter sw = new StreamWriter(saveFile1.FileName);

                string besedilo = textBox2.Text;
                byte[] file = Encoding.ASCII.GetBytes(besedilo);

                for (int i = 0; i < file.Length; i++)
                {
                    sw.WriteLine(file[i].ToString() + " ");
                    
                }

roba87 ::

uporabi na koncu
sw.Flush(); // Use this method to move any information from an underlying buffer to its destination, clear the buffer, or both.


Aja, pa če hočeš v file iz textboxa pisat, lahko uporabiš (glede na tvoj primer) :
StreamWriter sw = new StreamWriter("D:\\test.txt");

            string besedilo = textBox2.Text;
            byte[] file = Encoding.ASCII.GetBytes(besedilo);
            sw.WriteLine(System.Text.Encoding.UTF8.GetString(file));
            sw.Flush();

Zgodovina sprememb…

  • spremenil: roba87 ()

japol ::

Hvala, čisto pozabil na sw.Close(); lahko pa tudi s sw.Flush();

japol ::

Recimo da imam v .txt vpisane byte:

108
101
112
111
32
118
114
101
109
101

Kako jih odprem (pretvorim) v nek textbox tako da mi spiše v besedah?

klemen93 ::

 StreamReader sr = new StreamReader("neki.txt");
 string vrstica = string.Empty();
 while ((vrstica = sr.ReadLine()) != null)
 {
   textbox.Text += vrstica + " ";
 }

klemen93 ::

Nisem prebral da hočeš tudi pretvoriti byte, ker pa svojega prejšnega odgovora ne morem popravljati pošiljam ponovno.
StreamReader sr = new StreamReader("neki.txt");
UTF8Encoding encoding = new UTF8Encoding();
List<Byte> listBytov = new List<Byte>();
string vrstica;
while ((vrstica = sr.ReadLine()) != null)
{
     listBytov.Add(byte.Parse(vrstica));
}
textbox.Text = encoding.GetString(listBytov.ToArray());


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[c#] preberi tekst ločen na dele

Oddelek: Programiranje
12989 (791) vorantz
»

[c#] iz class v class

Oddelek: Programiranje
5811 (685) darkolord
»

[c#] savefiledialog, en sfd a več datotek

Oddelek: Programiranje
8680 (608) darkkk
»

C# Problem

Oddelek: Programiranje
131171 (967) joze67
»

C# text v .pdf

Oddelek: Programiranje
81318 (1107) japol

Več podobnih tem