čtení a zápis souboru – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

čtení a zápis souboru – C / C++ – Fórum – Programujte.comčtení a zápis souboru – C / C++ – Fórum – Programujte.com

 

_Radek_
~ Anonymní uživatel
88 příspěvků
18. 9. 2008   #1
-
0
-

Zdravím,

mám takový problém, který pořád nemůžu vyřešit. Snažím se napsat program, který čte znak po znaku ze souboru a tyto znaky postupně zapisuje do druhého výstupního souboru. Znaky ůspěšně zapíše tak jak má, jenom to nakonec souboru zapíše jeden nesmyslný znak navíc. Např. mám ve vstupním souboru text "Dobry den" ale ve výstupním souboru se mi nakonci např. " Dobry den' ". (Uvozovka nahoře)

#include <iostream>

#include <fstream>

using namespace std;
int main(int argc, char *argv[])
{
ifstream read("input.txt");
ofstream write("output.txt");

if (!read) {
cerr << "Nelze otevrit souboru pro cteni" << endl;
exit(1);
}else if(!write) {
cerr << "Nelze otevrit soubor pro zapis" << endl;
exit(1);
}

while(read)
{
char znak;
znak = read.get();
write << znak;
}

read.close();
write.close();

cout << "writing done!\nPress Enter to quit ..." << endl;
system("PAUSE");
return 0;
}

Nevíte někdo co s tím ?

Nahlásit jako SPAM
IP: 91.187.60.–
Bald3rr0
Super člen
18. 9. 2008   #2
-
0
-

Stačí přidat podmínku na testování konce souboru

char znak; 

while(read) {
znak = read.get();
if(znak != EOF) // Podmínka na testování konce souboru
write << znak;
}

Nahlásit jako SPAM
IP: 82.100.0.–
_Radek_
~ Anonymní uživatel
88 příspěvků
18. 9. 2008   #3
-
0
-

Aha, takže to znamená že je na konci ještě nějaký dodatečný znak co označuje konec souboru ?

Nahlásit jako SPAM
IP: 91.187.60.–
AdamHlavatovic0
Stálý člen
18. 9. 2008   #4
-
0
-

To _Radek_ : nie, na konci suboru ziaden dodatocny znak, oznacujuci jeho koniec nieje.

Nahlásit jako SPAM
IP: 217.73.16.–
_Radek_
~ Anonymní uživatel
88 příspěvků
18. 9. 2008   #5
-
0
-

Aha, ale ještě mám jednu otázku. Vlastně se snažím napsat program, který bude fungovat něco jako velmi jednoduchý šifrovač. Prostě přečtě znak a odečte např. dvojku a zapíše (a při dekodování se zase ke znaku přičtě dvojka). Problém ale nastane, když se snažím otevřít binární soubor (např. exe soubor). Čtení souboru se pak ukončí dřív než by mělo.
To se dá odstranit když tuto podmínku vypustím. Tím pádem se ale zase zapisuje onen nesmyslý znak v obyčejném ASCII soubor jako je txt.

Není nějaké řešení jak ošetřit tuto situaci ?
dík

Nahlásit jako SPAM
IP: 91.187.60.–
dannyk0
Věrný člen
18. 9. 2008   #6
-
0
-

Zjistit si delku souboru a tu testovat.

Nahlásit jako SPAM
IP: 85.135.97.–
Jedu v c++,c#,assembler,ASP.NET,PHP,databaze,bezpecnost softwaru[br] -----------------------------------------------------------[br] Muj blog o programovani,hudbe a vsem moznem,co najdu na netu :) [br] http://dannyk.aspone.cz[br] -----------------------------------------------------------[br] Na foru mam nejake prispevky pod nickem Master,tak jen pro upresneni :)
_Radek_
~ Anonymní uživatel
88 příspěvků
18. 9. 2008   #7
-
0
-

Eh, no moje programátorské zkušenosti nejsou zrovna největší, tak by mě zajímalo jak podle velikosti souboru poznám jestli je soubor binární nebo ne ?
Pozn. program by měl takto umět zakodovat a dekodovat jakykoliv typ souboru.

Nahlásit jako SPAM
IP: 91.187.60.–
dannyk0
Věrný člen
18. 9. 2008   #8
-
0
-

To je jedno jestli je binarni nebo ne.Proste si vemes pocet bytu(znaku) a ty nacitas a upravujes.Nic jinyho.Klasicky typ char ti na to bude stacit.Ale muze bejt i BYTE.

Nahlásit jako SPAM
IP: 85.135.97.–
Jedu v c++,c#,assembler,ASP.NET,PHP,databaze,bezpecnost softwaru[br] -----------------------------------------------------------[br] Muj blog o programovani,hudbe a vsem moznem,co najdu na netu :) [br] http://dannyk.aspone.cz[br] -----------------------------------------------------------[br] Na foru mam nejake prispevky pod nickem Master,tak jen pro upresneni :)
AdamHlavatovic0
Stálý člen
18. 9. 2008   #9
-
0
-

> Není nějaké řešení jak ošetřit tuto situaci ?
otvorit subor v binarnom rezime

fstream fin("file.dat", ios::binary);
a dalej snim pracujes ako predtym.

Nahlásit jako SPAM
IP: 217.73.16.–
KIIV
~ Moderátor
+43
God of flame
18. 9. 2008   #10
-
0
-

jinak se pouziva taky

while (!read.eof()) {
...
}

Nahlásit jako SPAM
IP: 80.250.27.–
Program vždy dělá to co naprogramujete, ne to co chcete...
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, 66 hostů

Podobná vlákna

čtení a zápis do souboru 3.2 — založil dragon124

Zapis a cteni v TxT — založil Mudraon

Moderátoři diskuze

 

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