Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Datei

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
10.08.2003, 15:19 Uhr
~CPlusPlus
Gast


Hallo,
ich hab da noch mal ne frage zu Dateien. Gibt es die möglichkeit wenn ich eine Datei geöffnet, die Anzahle der darin enthaltenen Zeichen abzufragen um die Größe eines Strings zur Laufzeit zu ermitteln.

Danke chon im Voraus
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
10.08.2003, 18:02 Uhr
kronos
Quotenfisch
(Operator)


z.b.:

C++:
int c, count;
FILE *file=fopen("yoghurtquark.txt");
c=fgetc(file);
for(count=0;c!=0;count++)
c=fgetc(file);
fclose(file);



edit: falls du den wert verwenden willst um einen entsprechend langen array zu deklarieren, solltest du count=1 initialisieren, sonst wird der 0-char nicht mitgerechnet...
--
main($)??<-$<='?'>>2?main($-!!putchar(
(("$;99M?GD??(??/x0d??/a:???;a"+'?'/4)
??($??)+'?'/3-2-1+$%2)??''?')):'?';??>

Dieser Post wurde am 10.08.2003 um 18:05 Uhr von kronos editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
11.08.2003, 07:27 Uhr
~CPlusPlus
Gast


Sorry aber irgendwie versteh ich dein Code nicht so ganz.

In meiner Klasse habe ich einen String m_DataString[1024] deklariert und mit dieser Methode tue ich ihn füllen.

Da es aber sein kann das eine Datei mehr als 1024 Zeichen hat oder auch weniger wollte ich wie oben schon gefragt die Anzahle der Zeichen in der Datei ermitteln und den String zur Laufzeit erstellen.


Code:
bool CFILE::Read()
{
    // Pruefen ob Datei geoeffnet
    if(m_File.is_open())
    {
        // Pruefen ob Fehler beim lesen der Datei
        if(!m_File.read(m_DataString, 1024))
        {
            cerr << "Fehler beim lesen der Datei" << endl;
            return false;
        }
    }
    else
    {
        cerr << "Datei zum lese nicht geöffnet" << endl;
        return false;
    }

    return true;
}




Danke

Markus
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
11.08.2003, 08:31 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)



C++:
int anzahlBytes(char* filename){
FILE *file
int rv;
if(!(file=fopen(filename)))return 0;
fseek(file,0,SEEK_END);
rv=ftell(file);
fclose(file);
retrun rv;


--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
11.08.2003, 08:41 Uhr
virtual
Sexiest Bit alive
(Operator)


@Heiko
fopen erwartet zwei Parameter. Es ist wichtig, daß dieser zweite parameter den Wert "rb" hat. "r" oder "rt" tut nicht.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
11.08.2003, 09:12 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


@virtual
jupp, den "rb" hab ich vergessen, die anderen tun nicht weil die glaub ich bei ascii 0x20 abschmieren
das kommt davon wenn man einfach so aus dem kopf direkt ins Forum postet ohne zu testen.
Klammer zu hab ich auch vergessen.

So hier die nun hoffentlich richtige version


C++:
int anzahlBytes(char* filename){
FILE *file
int rv;
if(!(file=fopen(filename,"rb")))return 0;
fseek(file,0,SEEK_END);
rv=ftell(file);
fclose(file);
return rv;
}



Gruss Heiko
--
...fleißig wie zwei Weißbrote

Dieser Post wurde am 11.08.2003 um 09:13 Uhr von Heiko editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
11.08.2003, 09:36 Uhr
virtual
Sexiest Bit alive
(Operator)


Um ganz sicher zu gehen, sollte fgetpos an Stelle von ftell verwendet werden: immerhin leben wir in einem Zeitzalter, wo Dateien ziemlich groß werden können, so daß ein fpos_t mit einem größeren Wertebereich mehr sicherheit bietet als ein plattes long.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
11.08.2003, 10:44 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


Jawohl Chef
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
11.08.2003, 11:11 Uhr
~CPlusPlus
Gast


Ok der ode Funktioniert.

Nur eins versteh ich nicht in meinem C++ Buch finde ich nichts über die Funktionen wie fopen, fseek, .... usw. Kann es sein das C Funktionen sind?

Denn in meinem Buch werden Dateien mit fstream, ifstream, ofstream, bearbeitet

Und die Funktion zum öffnen einer Datei ist z.B.

Code:
fstream File;
File.open("DateiName");


oda kurzform:

Code:
fstream File("DateiName");

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
11.08.2003, 11:18 Uhr
virtual
Sexiest Bit alive
(Operator)


Ja, das sind C Funktion. In C++ mußt du so arbeiten:

C++:
std::ifstream file("Dateiname", std::ios::binary|std::ios::in);
file.seekg(0, std::ios::end);
std::ifstream::streamsize size = file.tellg();


So oder so ähnlich. Ungetestet.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: