Vytvoření a čtení datového souboru – .NET – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Vytvoření a čtení datového souboru – .NET – Fórum – Programujte.comVytvoření a čtení datového souboru – .NET – Fórum – Programujte.com

 

Mutagen0
Super člen
6. 9. 2012   #1
-
0
-

Zdravím,

napadlo mě čirou náhodou, že bych mohl udělat datovej soubor (třeba pro víc obrázků do 1 souboru), ale vůbec mě nenapadá jak by mohl vypadat kód. Teda jako mám rozvržený jak by měl vypadat alg na zabalení, ale jak to napsat to už nevím.

 Nějak takhle bych si představoval algoritmus toho datového souboru, ale nevím jak to prostě napsat.

uint countFiles;
for (int i = 0; i < countFiles; i++)
{
	ushort ID; // ID by se zvětšovalo podle počtu údajů
	ushort NameFile_Length;
	string Name = (nějaká fce na přečtení stringu o délce NameFile_Length);
	ushort FileLength;
	//tady jsi nejsem jist ale aby to přečetlo počet udaju podle FileLength a třeba výsledek zobrazil v PictureBoxu
}

Děkuji za pomoc.

Nahlásit jako SPAM
IP: 89.190.90.–
VladislavK0
Super člen
6. 9. 2012   #2
-
0
-

Trvalo mi to asi 23,5 sekundy

{
	string[] fn = Directory.GetFiles("...\\Pictures", "*.jpg");
	FileStream sw = new FileStream("obrazky.data", FileMode.Create);
	foreach (string f in fn)
	{
		 using (FileStream sr = new FileStream(f, FileMode.Open))
		 {
			  byte[] b = new byte[sr.Length];
			  sr.Read(b, 0, (int)sr.Length); // 1
			  sr.Close();
			  byte[] bb = Encoding.ASCII.GetBytes(f); // 2
			  sw.Write(bb, 0, bb.Length); // ulozime info 2
			  sw.Write(b, 0, b.Length);  // ulozime info 1
		 }
	}
	sw.Close();
}

info 

1 nacteme cely obsah soboru obrazku

2 vytvorime oddelovaci hlavicku do vystupniho souboru

a v patricnem poradi ulozime

Nahlásit jako SPAM
IP: 89.24.54.–
Manželka programátora pošle svého muže koupit chleba s dovětkem kdyby měly housky přines jich deset! Co přinese programátor??
Mutagen0
Super člen
6. 9. 2012   #3
-
0
-

#2 VladislavK
Tos mi odpověděl jak zapisovat do souboru jen ... Já chci právě dodržovat určitou strukturu bez oddělování ...

Aby to vlastně ze začátku načetlo 8 byte a pak ve for četlo

4 byte (ID)

4 byte (Delka nazvu)

string /ten samozřejme je velkej podle předchozí informace

4 byte (Delka obrazku/souboru)

"buffer nebo něco" co mi dokáže sestrojit délku souboru a třeba načíst v pictureboxu ...

Samozřejmě je to jen example nemusí tam bejt přímo obrázek ale že bych rád zachoval tuhle strukturu ...

Edit : Ale jinak dík, že jsi mě poslal správným směrem jakým se mám zaměřit.

Nahlásit jako SPAM
IP: 89.190.90.–
VladislavK0
Super člen
6. 9. 2012   #4
-
0
-

Tak ted ti nerozumim.

Ty chces cist a ukladat jednotlive frame z obrazku??

Nebo ti nerozumim - podle ceho chces ridit ten pocet nactenych byte??

Nahlásit jako SPAM
IP: 89.24.54.–
Manželka programátora pošle svého muže koupit chleba s dovětkem kdyby měly housky přines jich deset! Co přinese programátor??
Mutagen0
Super člen
6. 9. 2012   #5
-
0
-

#4 VladislavK
Jde o to abych si ukladal jednotlivé informace zvlášt.

ID (to si vygeneruju podle toho kolik bude souboru)

Délka nazvu

Název

Délka souboru

Soubor

a to vlastně celý opakovat podle počtu souboru v dataarchivu

Nahlásit jako SPAM
IP: 89.190.90.–
VladislavK0
Super člen
6. 9. 2012   #6
-
0
-

Ale to jsou ty info oznacene indexem 2

string odd=";";
string nazev="jmeno.ext";
byte[] bb = Encoding.ASCII.GetBytes(ID.ToString()+odd+nazev.Length.ToString()+odd+nazev+odd+ ....... a tak dale
Nahlásit jako SPAM
IP: 89.24.54.–
Manželka programátora pošle svého muže koupit chleba s dovětkem kdyby měly housky přines jich deset! Co přinese programátor??
Mutagen0
Super člen
6. 9. 2012   #7
-
0
-

#6 VladislavK
Jojo teď na to koukám taky ... jenom si nejsem přesnej jistej zda jde narvat délka souboru a délka nazvu do ushort nebo musi bejt int prostě aby se délka mohla uložit do 4 byte jak délka nazvu tak souboru ...

Nahlásit jako SPAM
IP: 89.190.90.–
Mutagen0
Super člen
6. 9. 2012   #8
-
0
-

Myslím tím zápis podobný tomuhle kdyby to šlo.

byte[] newData = new byte[2];
newData[0] = 0x4F; 
newData[1] = 0;
Nahlásit jako SPAM
IP: 89.190.90.–
ingiraxo+15
Grafoman
6. 9. 2012   #9
-
0
-

doporučuju udělat tabulku o obsahu binarky, kde jsou uložený jednotlivý obrázky a potom jen všechny obrázky nasypat vedle sebe... nevýhoda je, že soubor bude o něco málo větší (pár B/KB max) ale rychlost čtení maximální možná, protože nečteš soubor, ale jen část jelikož víš, kde se obrázek nachází

například stylem.. že prvních 512b bude hlavička a zbytek obrázky 

[name;entry;size| ... | ...] byte(1)byte(2)byte(3)
---------- 512b ------------ -obr1---obr2---obr3-

ideální možnost by ještě byla, udělat hlavičku dynamickou v závislosti na obsahu (počtu obrázků).. tim ušetříš další místo v binárce

a samotný přidání dalšího obrázku nebude nijak náročný, protože na konec zapíšeš obrázek a do hlavičky jen přidáš další záznam o názvu/pozici obrázku

to co radí mutagen je sice klasická možnost, ale při velkým počtu obrázků je to celkem mazec procházet :-)

Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
VladislavK0
Super člen
6. 9. 2012   #10
-
0
-

Uz ti asi rozumim

Takze schvalne, mas velikej obrazek typu BMP jehoz velikost je radove ve stovkach megabytu treba 321Mb jeho velikost v byte je kolik ??? no prece 321 nnn nnn byte a myslis ze se tato hodnota vejde do short nebo ushort pokud vim tak short je 16bit typ tedy rozsah 0-65535 pro ushort nebo -32767 az 32768 pro short 

takze uz si umis odpovedet???

Nahlásit jako SPAM
IP: 89.24.54.–
Manželka programátora pošle svého muže koupit chleba s dovětkem kdyby měly housky přines jich deset! Co přinese programátor??
VladislavK0
Super člen
6. 9. 2012   #11
-
0
-

#8 Mutagen
No ja si myslim ze si docela komplikujes - takhle set nedela.

budesli takto ukladat ciselne hodnoty a pak tyto data odneses ke zpracovani na jinem OS typicky linux tak narazis na problem ktery se jmenuje MALY/VELKY endian

Nahlásit jako SPAM
IP: 89.24.54.–
Manželka programátora pošle svého muže koupit chleba s dovětkem kdyby měly housky přines jich deset! Co přinese programátor??
ingiraxo+15
Grafoman
6. 9. 2012   #12
-
0
-

nikdy pokud to není opravdu nutný neukládejte velikost názvu zvlášt!! do binárky jde zapsat string jako takovej a on si dynamicky určí jestli je potřeba uložit byte/short/int jako délku názvu

Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
Mutagen0
Super člen
6. 9. 2012   #13
-
0
-

#11 VladislavK
Nejde o Big a Little endian ... Ten teďka nechci řeěit, jde mi čistě jen o Win ...

Jen prostě chci aby to mělo peknou strukturu jak jsem tu už psal no i kdyz upravim to díky par radám.

uint početSouboru;

for (int i = 0; i < početSouboru; i++)

{

ushort ID;

ushort názevSouboru;

string Nazev (tady bude vlastně readbyte s číslem názevSouboru);

int/uint délkaSouboru;

buffer nebo něco do čeho bych zapsal celej soubor (podle délkySouboru);

}

Nahlásit jako SPAM
IP: 89.190.90.–
zlz
~ Anonymní uživatel
634 příspěvků
6. 9. 2012   #14
-
0
-

#11 VladislavK
Přesně takhle a různě podobně se to běžně dělá. Problém LE/BE je věc HW a ne OS a řeší se prostě tak, že se řekne v jakém formátu mají hodnoty být a pak se tak zapisují a načítají.

Nahlásit jako SPAM
IP: 80.188.216.–
lkjhg
~ Anonymní uživatel
1 příspěvek
7. 9. 2012   #15
-
0
-
Nahlásit jako SPAM
IP: 89.173.31.–
ingiraxo+15
Grafoman
7. 9. 2012   #16
-
0
-

#15 lkjhg
myslim, že tady je trochu o něco jiného.. kdyby si tvořil řekněme balík třeba 100 obrázků, tak to nebudeš přece dávat takto do XML... jednak serializace objektu je dobrej žrout velikosti a potom nemá smysl ukládat věci do XML, když obrázek má maximálně název a jeho serializovanou podobu

a to bych ještě zapoměl, žě XML je čitelný, takto v .dat souboru si to můžeš dát třeba pod heslo apod. a teď nechci kecat, ale mám dojem, že pokud dobře promyslíš struktůru dat. souboru, tak je s ním mnohem rychlejší práce

Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
zlz
~ Anonymní uživatel
634 příspěvků
8. 9. 2012   #17
-
0
-

#15 lkjhg
Ty jsi o něm zjevně jen slyšel. Kolo znovu objevují všichni bezmozci, kteří nedokázali včas posoudit, na co se XML hodí.

Nahlásit jako SPAM
IP: 80.188.216.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 4 hosté

Podobná vlákna

Čtení souboru ve VB — založil hansk

čtení ze souboru — založil witsarah

čtení ze souboru — založil Jakub Vojáček

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý