DEUTSCHE VERSION |
|
Links | | | Forums | | | Comments | | | Report news |
Chat | | | Polls | | | Newsticker | | | Archive |
amiga-news.de Forum > Programmierung > Existenz einer Datei | [ - Search - New posts - Register - Login - ] |
-1- | [ - Post reply - ] |
2003-12-07, 17:24 h Mad_Dog Posts: 1944 User |
Hier mal eine Bescheidene Frage: Wie löst Ihr für gewöhnlich folgendes Problem: Die Existenz einer Datei überprüfen. Bis jetzt habe ich zwei verschiedene Ansätze benutzt: 1. Ansatz: Versuche, das File zo locken. Anhand des Rückgabewerts der Lock-Funktion erkennt man dann, ob das File existiert. 2. Ansatz: Gesamtes Dir, indem sich das File befindet in einen binären Suchbaum einlesen und dann in diesem nach dem File suchen. In den RKMS habe ich leider keine Funktion wie etwa Exists(FILE) gefunden. Gibt's sowas? Habe ich da was übersehen? -- http://www.norman-interactive.com [ - Answer - Quote - Direct link - ] |
2003-12-07, 18:36 h nylan Posts: 58 User |
Oh, genau das Problem wollte ich auch just gerade lösen. Möchte gerne rausfinden ob ein Verzeichnis existiert... Ich schau auch nochmal eben weiter, vielleicht findet sich ja was... ein "exist" existiert seltsamerweise wirklich nicht als dos funktion. nylan [ - Answer - Quote - Direct link - ] |
2003-12-07, 18:51 h Mad_Dog Posts: 1944 User |
Zitat: Zumindest funktioniert es mit den von mir erwähnten Ansätzen. Auch in den Beispielsources zu den RKMs war es mit einem Lock-Versuch gelöst. Das einzige, was mir noch einfällt, wäre ein Workaround, bei dem man sich den Befehl exists mit einem Shell-Script selbst bastelt. In der AmigaDos Shell-Skriptsprache gibt es immerhin einen Ausdruck "IF EXISTS <filename>". Aber einen direkten Ansatz scheint es wohl nicht zu geben? -- http://www.norman-interactive.com [ - Answer - Quote - Direct link - ] |
2003-12-07, 18:57 h thomas Posts: 7718 User |
BOOL exists (UBYTE *name) { BPTR lock; if (lock = Lock(name,SHARED_LOCK)) { UnLock (lock); return (TRUE); } return (FALSE); } Diese Funktion gibt auch TRUE zurück, wenn es ein Verzeichnis diesen Namens gibt. Wenn es eine Datei sein muß, solltest du lieber Open() und Close() nehmen. Z.B. so, wenn du eine existierende Datei nicht überschreiben möchtest: BPTR SafeOpenNewfile (char *name) { BPTR fhand; if (fhand = Open(name,MODE_OLDFILE)) { Close (fhand); SetIoErr (ERROR_OBJECT_EXISTS); return (NULL); } return (Open(name,MODE_NEWFILE)); } Gruß Thomas -- Email: thomas-rapp@web.de Home: home.t-online.de/home/thomas-rapp/ [ - Answer - Quote - Direct link - ] |
2003-12-07, 18:59 h AchimStegemann Posts: 112 User |
Wenn du in C programmieren möchstest geht das so: int func(char *filename) { BPTR lock; if(lock=Lock(filename,SHARED_LOCK)) { // gefunden! bla bla... UnLock(lock); return TRUE; } return FALSE; } Die Datei darf aber nicht von einem anderen Programm bereits zum Schreiben geöffnet sein. Bei FALSE kann man sich aber noch IoErr() bedienen, da hier beim Scheitern der Lock-Funktion weitere Fehlercodes analysiert werden können. Gruß Achim [ - Answer - Quote - Direct link - ] |
2003-12-07, 19:05 h Mad_Dog Posts: 1944 User |
@Achim und Thomas: Ja, so ähnlich habe ich das bisher auch immer gemacht. Und eben mit IOErr() noch den Fehlercode überprüft. Aber was "direkteres" gibt die Dos.library wohl nicht her? -- http://www.norman-interactive.com [ - Answer - Quote - Direct link - ] |
2003-12-07, 20:15 h Solar Posts: 3680 User |
Since Open() (on a filesystem object) implies a Lock() internally, the amount of processing required for a FileHandle is obviously greater than that for a FileLock. Thus, to check for the mere existence of a file, it is better to use the function Lock() (and maybe convert the lock into a FileHandle subsequently by using the new 2.0 function OpenFromLock()); unfortunately, directories cannot be Open()ed. (Amiga Guru Book, §17.1.93 Open() ) [ - Answer - Quote - Direct link - ] |
2003-12-07, 20:50 h mrbbc Posts: 101 User |
Also ich begnüge mich für normal damit, dass wenn fopen() NULL zurück gibt, dass die Datei oder das angegebene Verzeichnis etc. nicht existiert... Kommt natürlich darauf an, ob man's genauer wissen muss, oder nur geprüft werden soll, ob eine Datei existiert... [ - Answer - Quote - Direct link - ] |
2003-12-08, 21:22 h Holger Posts: 8116 User |
Zitat:Wieso? Wenn Du ein Lock hast, kannst Du Dir auch die File-Informationen geben lassen. Dann kannst Du auch erfahren, ob es ein Verzeichnis, eine Datei oder ein symbolischer Link ist. Die Datei dafür zu öffnen, ist overkill. mfg -- Good coders do not comment. What was hard to write should be hard to read too. [ - Answer - Quote - Direct link - ] |
2003-12-08, 23:44 h Mad_Dog Posts: 1944 User |
Zitat: Yo, das geht in etwa so (Codeschnipsel aus einem meiner Programme): code:// Lock the file in EXCLUSIVE_LOCK mode MyFileLock = Lock(filename,ACCESS_WRITE); // If Lock was successfull -> File exists if (MyFileLock != 0) { if (Examine(MyFileLock,File_Info_Block) == 0) { PrintFault(IoErr(),"Examine failed "); } // ...Do some stuff here UnLock(MyFileLock); // Unlock the file again } Analog für Lesezugriffe... -- http://www.norman-interactive.com [ - Answer - Quote - Direct link - ] |
-1- | [ - Post reply - ] |
amiga-news.de Forum > Programmierung > Existenz einer Datei | [ - Search - New posts - Register - Login - ] |
Masthead |
Privacy policy |
Netiquette |
Advertising |
Contact
Copyright © 1998-2024 by amiga-news.de - all rights reserved. |