amiga-news DEUTSCHE VERSION
.
Links| Forums| Comments| Report news
.
Chat| Polls| Newsticker| Archive
.

amiga-news.de Forum > Programmierung > Examine [ - Search - New posts - Register - Login - ]

-1- [ - Post reply - ]

2007-05-15, 14:20 h

Kaesebroetchen
Posts: 643
User
Ich habe unter AROS folgendes Problem.

Um die Größe einer Datei herauszufinden bevor ich Sie geladen habe, möchte ich die Examine Funktion verwenden.

Bedauerlicherweise führt das unmittelbar zu einem Komplettabsturz.

Hier ist mein Code

Mache ich da irgenwas grundsätzliches falsch ?
--
http://amidevcpp.amiga-world.de/

[ - Answer - Quote - Direct link - ]

2007-05-15, 14:37 h

gni
Posts: 1106
User
Zitat:
Kaesebroetchen:
Mache ich da irgenwas grundsätzliches falsch ?

Versuchs mal so:

struct FileInfoBlock MurksFib;
...
Examine( BPTRFileLock, &MurksFib );
return MurksFib.fib_Size;

und selbst das hat noch Potential für Nichtfunktionieren, da der FileInfoBlock langwortausgerichtet sein muß, dh. man braucht noch eine __aligned Direktive, die jedoch Compilerabhängig ist. Wenn Du das alles umgehen möchtest, dann allokierst Du den FileInfoBlock per AllocDosObject(), den Du dann natürlich per FreeDosObject() wieder freigeben mußt.

[ - Answer - Quote - Direct link - ]

2007-05-15, 14:50 h

Kaesebroetchen
Posts: 643
User
@gni:
Ah, Danke das funktioniert !

Aus AllocDosObject werde ich nicht so recht schlau.
Die Dokumentation ist da recht spärlich:

Zitat:
AllocDosObject
Synopsis

APTR AllocDosObject(
ULONG type,
struct TagItem * tags );

Function

Creates a new dos object of a given type. This memory has to be
freed with FreeDosObject().

Inputs

type - Object type.
tags - Pointer to taglist array with additional information. See
<dos/dostags.h> for a list of all supported tags.

Result

Pointer to new object or NULL, to indicate an error.


Ich finde da wäre ein Beispiel ganz nett...

--
http://amidevcpp.amiga-world.de/

[ - Answer - Quote - Direct link - ]

2007-05-15, 15:13 h

gni
Posts: 1106
User
Zitat:
Kaesebroetchen:
Aus AllocDosObject werde ich nicht so recht schlau. Die Dokumentation ist da recht spärlich: [...]

Da steht doch alles drin, was Du wissen mußt? Welche Werte "type" annehmen kann, ist in dos/dos.h dokumentiert (zb. DOS_FIB). Die Tagliste kann leer bleiben, entweder per NULL Argument oder eine leere Tagliste, die nur TAG_END enthält.

[ - Answer - Quote - Direct link - ]

2007-05-15, 15:28 h

Kaesebroetchen
Posts: 643
User
@gni:
z.B. das type in dos.h dokumentiert ist hätte auch ruhig da stehen können :)

Danke für den Hinweis!
--
http://amidevcpp.amiga-world.de/

[ - Answer - Quote - Direct link - ]

2007-05-15, 18:30 h

MaikG
Posts: 5172
User
Mit Seek bekommst du auch die größe ohne die Datei in den Speicher
zu laden.

[ - Answer - Quote - Direct link - ]

2007-05-16, 08:00 h

gni
Posts: 1106
User
Zitat:
MaikG:
Mit Seek bekommst du auch die größe ohne die Datei in den Speicher zu laden.

Schlechter Rat. Abhängig vom Dateisystem ist Seek() um ein Vielfaches langsamer als Examine().

[ - Answer - Quote - Direct link - ]

2007-05-16, 09:53 h

MaikG
Posts: 5172
User
>Schlechter Rat. Abhängig vom Dateisystem ist Seek() um ein Vielfaches langsamer als Examine().

Aha, ist aber einfacher - weil wenn ich sogar mit Seek umgehen kann :-)

[ - Answer - Quote - Direct link - ]


-1- [ - Post reply - ]


amiga-news.de Forum > Programmierung > Examine [ - Search - New posts - Register - Login - ]


.
Masthead | Privacy policy | Netiquette | Advertising | Contact
Copyright © 1998-2024 by amiga-news.de - all rights reserved.
.