AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

OpenFile

Ein Thema von Willie1 · begonnen am 5. Okt 2020 · letzter Beitrag vom 6. Okt 2020
Antwort Antwort
Seite 1 von 2  1 2   
Willie1

Registriert seit: 28. Mai 2008
657 Beiträge
 
Delphi 10.1 Berlin Starter
 
#1

OpenFile

  Alt 5. Okt 2020, 16:35
Hallo Leute,
ich habe mir vor 15 Jahren eine Routine gebastelt, mit der ich die drei Zeit-Stempel einer Datei verändern kann.
Delphi-Quellcode:
      if FileExists(Filename) then beep;
      HFileResult := OpenFile(pAnsiChar(filename), ofstr, OF_WRITE);
      Result:=0;
      if HFileResult <> HFILE_ERROR then begin
        if dtCreated > 0 then SetFileTime(HFileResult, @FT1, nil, nil);
        if dtModified > 0 then SetFileTime(HFileResult, nil, nil, @FT2);
        if dtLastAccess > 0 then SetFileTime(HFileResult, nil, @FT3, nil)
      end
      else begin
        Result:=GetLastError;
        if ShowErrorMsg then ShowMessage('"'+Filename+'"'#13+SysErrorMessage(Result));
      end;
Das hat immer funktioniert, jetzt geht es nicht mehr. "Das System kann die Datei nicht finden". Das ist Unsinn, die Datei ist vorhanden! Sie wird nicht von einem anderem Prozess benutzt und ist auch nicht schreibgeschützt. Dann gäbe es doch eine andere Fehlermeldung.
Der Fehler tritt seit dem Update auf Windows 10 2003 auf. Kann Zufall sein. Was ist da los?
Gruß Willie.
Gut hören kann ich schlecht, schlecht sehen kann ich gut - Ersteres stimmt nicht, das zweite schon.
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.167 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: OpenFile

  Alt 5. Okt 2020, 16:39
Vielleicht ist der Pfad zu lang (mehr als 260 Zeichen) oder der Pfad enthält Zeichen die Delphi nicht in einen AnsiString packen kann?

PS: Vor 15 Jahren war die Welt noch eine andere. Die Doku hat vielleicht auch einen Grund wenn sie von 16-Bit-Windows spricht und sagt
Zitat:
This function has limited capabilities and is not recommended. For new application development, use the CreateFile function.

Geändert von Der schöne Günther ( 5. Okt 2020 um 16:41 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.682 Beiträge
 
Delphi 5 Professional
 
#3

AW: OpenFile

  Alt 5. Okt 2020, 17:17
Welche Datei versuchst du denn zu bearbeiten? Ein zu langer Pfad zu lang könnte gut sein, denn MS sagt zu MSDN-Library durchsuchenOpenFile:
Zitat:
The OFSTRUCT structure contains a path string member with a length that is limited to OFS_MAXPATHNAME characters, which is 128 characters. Because of this, you cannot use the OpenFile function to open a file with a path length that exceeds 128 characters. The CreateFile function does not have this path length limitation.
Grüße
Dalai
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.122 Beiträge
 
Delphi 12 Athens
 
#4

AW: OpenFile

  Alt 5. Okt 2020, 17:26
Man verwendet schon seit jahrzehnten kein OpenFile mehr.
-> CreateFile hat man gefälligst zu nutzen

https://docs.microsoft.com/en-us/win...nbase-openfile



Seit ner ganzen Weile ist im Windows bei vielen "aktuelleren" APIs sogar die 255 Char-Grenze entfallen (MAX_PATH ist nicht mehr die Grenze)
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PosEx im Delphi viel seltener praktiziert.

Geändert von himitsu ( 5. Okt 2020 um 17:30 Uhr)
  Mit Zitat antworten Zitat
Willie1

Registriert seit: 28. Mai 2008
657 Beiträge
 
Delphi 10.1 Berlin Starter
 
#5

AW: OpenFile

  Alt 5. Okt 2020, 17:29
Vielleicht ist der Pfad zu lang (mehr als 260 Zeichen) oder der Pfad enthält Zeichen die Delphi nicht in einen AnsiString packen kann?
Der Pfad ist nicht zu lang, hat aber Leerzeichen keine deutschen Umlaute. Ich habe das neue Delphi seit 4 Jahren, bisher ging's.
.
Willie.
Gut hören kann ich schlecht, schlecht sehen kann ich gut - Ersteres stimmt nicht, das zweite schon.
  Mit Zitat antworten Zitat
Willie1

Registriert seit: 28. Mai 2008
657 Beiträge
 
Delphi 10.1 Berlin Starter
 
#6

AW: OpenFile

  Alt 5. Okt 2020, 17:32
Man verwendet schon seit jahrzehnten kein OpenFile mehr.
-> CreateFile hat man gefälligst zu nutzen

https://docs.microsoft.com/en-us/win...nbase-openfile
Ok, Himitsu, das Ding ist ja auch 15 Jahre alt! W.
Gut hören kann ich schlecht, schlecht sehen kann ich gut - Ersteres stimmt nicht, das zweite schon.
  Mit Zitat antworten Zitat
Willie1

Registriert seit: 28. Mai 2008
657 Beiträge
 
Delphi 10.1 Berlin Starter
 
#7

AW: OpenFile

  Alt 5. Okt 2020, 18:46
Hallo,
es liegt wohl an den Leerzeichen im Pfad.

Ich habe es so umgebaut:
HFileResult := CreateFile(PChar(Filename), 0, 0, nil, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0); Sind das so die richtigen Parameter? Da kenne ich mich nicht aus.
Willie.
Gut hören kann ich schlecht, schlecht sehen kann ich gut - Ersteres stimmt nicht, das zweite schon.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.122 Beiträge
 
Delphi 12 Athens
 
#8

AW: OpenFile

  Alt 5. Okt 2020, 18:51
Vermutlich ja.

Kommt drauf an was du willst.
https://stackoverflow.com/questions/...of-windows-api

Wobei ich nicht weiß warum du bei einer nichtexistierenden Datei das Datum ändern willst. (inkl. dem Erstellen dieser Datei)
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PosEx im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Willie1

Registriert seit: 28. Mai 2008
657 Beiträge
 
Delphi 10.1 Berlin Starter
 
#9

AW: OpenFile

  Alt 5. Okt 2020, 19:10
Vermutlich ja.

Kommt drauf an was du willst.
https://stackoverflow.com/questions/...of-windows-api

Wobei ich nicht weiß warum du bei einer nichtexistierenden Datei das Datum ändern willst. (inkl. dem Erstellen dieser Datei)
Ich habe es in OPEN_EXISTING geändert.
Natürlich will ich nur das Datum einer existierenden Datei ändern. Wie beschrieben, geht es nicht. Ich habe mich versehen, es passiert nichts. W.
Gut hören kann ich schlecht, schlecht sehen kann ich gut - Ersteres stimmt nicht, das zweite schon.
  Mit Zitat antworten Zitat
Schwedenbitter

Registriert seit: 22. Mär 2003
Ort: Finsterwalde
622 Beiträge
 
Turbo Delphi für Win32
 
#10

AW: OpenFile

  Alt 5. Okt 2020, 19:26
Mit SysUtils kann man doch folgendes basteln:
Delphi-Quellcode:
FileHandle:=FileOpen(aPath + SR.Name, fmOpenReadWrite Or fmShareExclusive);
Try
   If SetFileTime(FileHandle, @FileTime, @FileTime, @FileTime) Then
      Memo1.Lines.Append(SR.Name + ' -> success')
   Else
      Memo1.Lines.Append(SR.Name + ' -> ' + SysErrorMessage(GetLastError));
Finally
   FileClose(FileHandle);
End;
Ließ sich gerade compilieren und funktioniert.
Alex Winzer
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:07 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz