![]() |
Hilfe bei datei auslesen
hallo 8)
ich habe folgendes:
Delphi-Quellcode:
irgendwie bekomme ich folgenden runtime error:
lstrcat(buf, '\testordner\datei');
MessageBox(0, buf, 'jo', 0); AssignFile(hFile, string(buf)); Reset(hFile); "Runtime Error 3 at 0042... usw" wenn ich das "Reset" in meinem code auskommentiere passiert das nicht...was ist daran denn falsch? |
Re: Hilfe bei datei auslesen
Moin Pseudemys Nelsoni,
wie ist denn hFile deklariert? |
Re: Hilfe bei datei auslesen
hallo christian,
als "TextFile". Die Datei hat zwar nicht die Endung ".txt"(um genau zu sein - sie hat gar keine Endung), aber sie enthält nur Text, das dürfte der fehler doch nicht sein oder? |
Re: Hilfe bei datei auslesen
Moin!
Ich habe mir gerade mal die Fehlermeldung 3 im Klartext ausgeben lassen mit ShowMessage(SysErrorMessage(3)); und dabei kam raus, dass es "Das System kann den angegebenen Pfad nicht finden" ist. Ergo: Deine Dateiangabe / -pfad stimmen nicht. MfG Muetze1 |
Re: Hilfe bei datei auslesen
hallo mütze,
also die datei existiert aber 100% kann das sein das "/datei" als ordner angesehen wird weil keine endung dran ist? wenn ja, was kann ich dann tun? |
Re: Hilfe bei datei auslesen
Ah, nun gehts,
danke an euch beide :mrgreen: es fehlte doch ein ordner da zwischen :oops: EDIT: nun bekomme ich noch den Fehler "6"... angeblich kein gültiges handle... wie prüf ich ob das handle ein handle ist? <> nil und <> 0 gehen nicht :\ |
Re: Hilfe bei datei auslesen
Moin Pseudemys Nelsoni,
ein Handle ist dann ungültig wenn es den Wert INVALID_HANDLE_VALUE hat (Windows Konstante, als integer -1 ) |
Re: Hilfe bei datei auslesen
hallo christian^^
da kommen wieder 2 Fragen auf... 1. if hFile <> INVALID_HANDLE_VALUE then << Das hier funktioniert nicht, "Inkompatible Typen". 2. Wieso kommt überhaupt der fehler eines fehlenden handles? ich habe doch die datei mit: "AssignFile(hFile, string(buf));" geöffnet oder? |
Re: Hilfe bei datei auslesen
Moin Pseudemys Nelsoni,
mit AssignFile tust Du im System gar nichts. Hier wird nur intern für Delphi eine Verbindung zwischen der Dateivariablen und dem Pfad zu der Datei angelegt. Erst Reset führt zu einer Aktion im System. |
Re: Hilfe bei datei auslesen
hallo christian,
aber reset hab ich ja auch drinnen und ich bekomme trotzdem den fehler "Runtime error 6...". So hatte ich es bis jetzt:
Delphi-Quellcode:
begin
lstrcat(buf, '\System32\testordner\datei'); AssignFile(hFile, string(buf)); Reset(hFile); while not EOF(hFile) do begin ReadLN(line); // hier der fehler(denke ich mal) MessageBox(0, PChar(line), 'jo', 0); end; end; |
Re: Hilfe bei datei auslesen
Zitat:
Mich würde interessieren, welche Variable du wie deklariert hast. Evtl. liegt der Fehler einfach in einer Vermischung von Pascal- und WinAPI-Variablen. |
Re: Hilfe bei datei auslesen
Und noch was. Warum ist buf ein PChar, wo du es doch so wie so wieder nach String castest?
Delphi-Quellcode:
Hat die Datei keine Dateinamenerweiterung?
lstrcat(buf, '\System32\testordner\datei');
AssignFile(hFile, string(buf)); |
Re: Hilfe bei datei auslesen
@Luckie:
Zitat:
Zitat:
|
Re: Hilfe bei datei auslesen
Aha, man sollte doch immer alles lesen. :roll:
Also, so lange hie rnicht der komplette Quelltext der Routine gepostet wird ist es nur ein Rumgerate. Nur noch eine Vermutung. machst du vielleicht sowas:
Delphi-Quellcode:
Ich tippe allerdings auch darauf, dass Pascal Routinen mit System Routinen gemischt werde. Was amn nicht machen sollte, aber darauf wird in der Hilfe auch ausdrücklich hingewiesen.
hFile := OpenFile(...);
AssignFile(hFile, ...); |
Re: Hilfe bei datei auslesen
hallo luckie,
Zitat:
Delphi-Quellcode:
die funktion ist natürlich noch nicht fertig, macht aber bereits hier fehler....
function SetServer(szAddr: PChar): integer;
var hFile : TextFile; osvi : TOSVERSIONINFO; buf : Array[0..255] of char; ofs : TOFSTRUCT; lpFileSize : DWORD; line : string; begin result := -1; GetWindowsDirectory(@buf[0], SizeOf(Buf)); ZeroMemory(@osvi, SizeOf(TOSVERSIONINFO)); osvi.dwOSVersionInfoSize := SizeOf(TOSVERSIONINFO); if GetVersionEx(osvi) then begin case osvi.dwPlatformId of VER_PLATFORM_WIN32_WINDOWS: begin // kommt später end; VER_PLATFORM_WIN32_NT: begin lstrcat(buf, '\System32\drivers\etc\hosts'); AssignFile(hFile, string(buf)); Reset(hFile); while not EOF(hFile) do begin ReadLN(line); // löst den fehler aus MessageBox(0, PChar(line), 'blubb', 0); end; end; else Exit; end; end; end; nur ka wieso, ich entdecke keinen fehler, und wie gesagt beim ausführen kommt "Runtime Error 6 in..." |
Re: Hilfe bei datei auslesen
Hallo!
Zitat:
[gebetsmühle] Wo das gesucht wird, hängt davon ab, ob nicht ein anderes Programm den Default-Ordner geändert hat! [/gebetsmühle] Gib mal den vollen Pfad an, dann sehen wir weiter. Soll das im Windows-Verzeichnis sein? Gruß Dietmar Brüggendiek |
Re: Hilfe bei datei auslesen
hallo Brüggendiek ;),
guck dir mal die funktion "lstrcat"(das pendant zu "Concat()" in delphi) in der winapi hilfe an, dann weiss du warum da ein halber pfad steht. Denn "buf" enthält bereits die komplette pfadangabe zum Windows ordner. lstrcat kombiniert diese 2 strings zu einem bzw erweitert den ersten um den zweiten. |
Re: Hilfe bei datei auslesen
Moin!
Und könnte es vielleicht sein, das er einen doppelten Backslash da reinbekommt, weil \System32... ja auch noch einen hat am Anfang? Und nochwas, was auch der Fehler sein kann: Wenn du ein NTFS Laufwerk hast, dann haben die Dateien unterschiedliche Rechteverteilungen für die einzelnen User/Gruppen. Die hosts in dem Verzeichnis wird auch extra mit solchen Rechten geschützt, und zwar in dem Sinne, das Administratoren und das System vollen Zugriff auf die Datei haben aber normale Benutzer nur Lesezugriff. Da aber die alten File Routinen bei Reset, etc die Dateien immer zum Lesen und Schreiben öffnen, bekommt er da wahrscheinlich ein Problem. Abhilfe schafft hier die Variable FileMode (ich hoffe die gibt es noch, so hiess sie in Pascal) zu ändern. Sie gibt an, welcher Modus beim Reset() etc verwendet wird. IMHO müsstest du eine 1 vor dem Reset() der Variablen zuweisen - ich weiss es aber nicht mehr genau und daher solltest du dich da mal kundig machen bzw. einer hier weiss das. MfG Muetze1 |
Re: Hilfe bei datei auslesen
hallo Muetze,
danke für deine antwort.
Delphi-Quellcode:
Ne, der api hilfe nach wird zwar mit GetWindowsDirectory der pfad mit "\" am ende ausgegeben, jedoch war da keiner am ende. Der pfad muss auch 100% richtig sein, denn sonst würde ich den runtime error "3" bekommen, nicht "6" :\.
Und könnte es vielleicht sein, das er einen doppelten Backslash da reinbekommt, weil \System32... ja auch noch einen hat am Anfang?
ich werde mal weiter gucken, worans liegt, deine tipps waren jedenfalls schonmal gut. |
Re: Hilfe bei datei auslesen
Wieso sieht das niemand? ;)
Code:
... bei ReadLn übergibst du ihm doch garkeine Datei, wo er rauslesen soll. Ergo versucht er von StdIn zu lesen, was bei Nicht-Konsolen-Anwendungen scheitert. (imho)
...
AssignFile(hFile, string(buf)); Reset(hFile); while not EOF(hFile) do begin ReadLN(hFile, line); // sollte das Problem lösen MessageBox(0, PChar(line), 'blubb', 0); end; ... Grüße, Mario |
Re: Hilfe bei datei auslesen
Moin!
Zitat:
... hFile ist die Datei und die gibt er sehr wohl an bei ReadLn(). @Pseudemys Nelsoni: Hast du auch mal meine 2. Vermutung durchdacht und nicht nur die 1. ?? MfG Muetze1 |
Re: Hilfe bei datei auslesen
Wo gibt er sie an? Bin den Thread grad nochmal durch gegangen und hab überall nur "ReadLN (line);" gesehen. ;)
|
Re: Hilfe bei datei auslesen
Moin!
Ähm, sorry :wall: . Ich habe den Beitrag anhand deines Code Abschnitt geschrieben - aber naja *hüstel* - der war ja schon von dir angepasst auf den korrekten Code. Ok, ich sollte vielleicht vorher nochmal alles durchgehen... :drunken: Ergo: Mein Fehler... MfG Muetze1 |
Re: Hilfe bei datei auslesen
Macht nix. Hätte es auch besser kennzeichnen können. Wollte es eigentlich auch, jedoch hat er keine Bold-Attribs im Code-Tag unterstützt ...
Grüße, Mario |
Re: Hilfe bei datei auslesen
Arrgh!
Na klar, ReadLN muss natürlich die Datei übergeben werden. :wall: Mit der Source wär ich früher drauf gekommen :wink: |
Re: Hilfe bei datei auslesen
nun gehts....
DANKE für die antworten :) komisch das sich das ganze kompilieren liess ohne das ich die datei angegeben hab :\ |
Re: Hilfe bei datei auslesen
Moin!
Zitat:
MfG Muetze1 |
Re: Hilfe bei datei auslesen
danke dir :)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:13 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz