Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Hilfe bei datei auslesen (https://www.delphipraxis.net/24697-hilfe-bei-datei-auslesen.html)

Kernel32.DLL 24. Jun 2004 19:30

Re: Hilfe bei datei auslesen
 
Zitat:

1. if hFile <> INVALID_HANDLE_VALUE then << Das hier funktioniert nicht, "Inkompatible Typen".
Das kann nicht funktionieren, weil TextFile eine Pascal-interne Variable ist. Um INVALID_HANDLE_VALUE benutzen zu können, bedarf es IMHO einem Fensterhandle, dass einen Integerwert hat. Dies bekommt man aber direkt über die Win-API.

Mich würde interessieren, welche Variable du wie deklariert hast. Evtl. liegt der Fehler einfach in einer Vermischung von Pascal- und WinAPI-Variablen.

Luckie 24. Jun 2004 19:34

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:
lstrcat(buf, '\System32\testordner\datei');
AssignFile(hFile, string(buf));
Hat die Datei keine Dateinamenerweiterung?

Kernel32.DLL 24. Jun 2004 19:43

Re: Hilfe bei datei auslesen
 
@Luckie:
Zitat:

Hat die Datei keine Dateinamenerweiterung?
Zitat:

Die Datei hat zwar nicht die Endung ".txt"(um genau zu sein - sie hat gar keine Endung)...
Bitte sehr, gern geschehen :stupid:

Luckie 24. Jun 2004 19:47

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:
hFile := OpenFile(...);
AssignFile(hFile, ...);
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.

Pseudemys Nelsoni 24. Jun 2004 21:01

Re: Hilfe bei datei auslesen
 
hallo luckie,

Zitat:

Also, so lange hie rnicht der komplette Quelltext der Routine gepostet wird ist es nur ein Rumgerate.
Delphi-Quellcode:
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;
die funktion ist natürlich noch nicht fertig, macht aber bereits hier fehler....

nur ka wieso, ich entdecke keinen fehler, und wie gesagt beim ausführen kommt "Runtime Error 6 in..."

Brüggendiek 24. Jun 2004 21:48

Re: Hilfe bei datei auslesen
 
Hallo!

Zitat:

Zitat von Pseudemys Nelsoni
Delphi-Quellcode:
          lstrcat(buf, '\System32\drivers\etc\hosts');

Was ist das denn für ein Dateiname?
[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

Pseudemys Nelsoni 24. Jun 2004 22:46

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.

Muetze1 25. Jun 2004 01:27

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

Pseudemys Nelsoni 25. Jun 2004 02:10

Re: Hilfe bei datei auslesen
 
hallo Muetze,

danke für deine antwort.

Delphi-Quellcode:
Und könnte es vielleicht sein, das er einen doppelten Backslash da reinbekommt, weil \System32... ja auch noch einen hat am Anfang?
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" :\.

ich werde mal weiter gucken, worans liegt, deine tipps waren jedenfalls schonmal gut.

Nuclear-Ping 25. Jun 2004 08:49

Re: Hilfe bei datei auslesen
 
Wieso sieht das niemand? ;)

Code:
  ...
  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;
  ...
... 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)

Grüße,
Mario


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:04 Uhr.
Seite 2 von 3     12 3      

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