object.Close() klappt nicht (Win10)?

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

User avatar
Gucky_87
Posts: 375
Joined: 03 Jul 2014, 05:09

object.Close() klappt nicht (Win10)?

23 Nov 2017, 06:31

Huhu zusammen,

ersmtal den Code, um den es geht:

Code: Select all

scanFileForBinary( filePath, byref searchBinary, searchBinarylength )
{
    if !FileExist( filePath )
        return -1

    Offset := 0
    fileObj := fileOpen( filePath, "r" )
    Loop
    {
        if ( fileObj.ReadUChar() = numGet( searchBinary, Offset, "UChar" ) )
        {
            Offset++
            if ( Offset = searchBinarylength )
            {
                foundPosition := fileObj.pos - Offset
                fileObj.Close()
                return %foundPosition%
            }
        }
        else if ( offset )
            fileObj.pos -= ( Offset - 1 ), Offset := 0
    }
    Until fileObj.AtEOF
    fileObj.Close()
}
Diesen hatte mir (glaube ich jedenfalls) just me gepostet.
Die Routine klappt, mir ist aber aufgefallen, dass, obgleich 'fileObj.Close()' angegeben ist, dieses nicht zu funktionieren scheint. Ich kann z.B. entsprechende Dateien, die durch diese Routine geöffnet wurden, nicht löschen, verschieben, umbenennen, etc.

Oder mache ich was falsch?


Grüße,

Gucky.
User avatar
nnnik
Posts: 4500
Joined: 30 Sep 2013, 01:01
Location: Germany

Re: object.Close() klappt nicht (Win10)?

23 Nov 2017, 06:59

Closes the file, flushes any data in the cache to disk and releases the share locks. Although the file is closed automatically when the object is freed, it is recommended to close the file as soon as possible.
Das bedeutet in diesem Fall, dass es keinen Unterschied macht ob du close verwendest oder nicht, da die Referenz auf dein Objekt ( die lokale variable fileObj ) direkt danach, beim Verlassen der Funktion gelöscht wird.
Wenn das passiert wird auch automatisch close aufgerufen.

Edit:Bei mir funktioniert es tatsächlich korrekt und ich habe diese Probleme nicht.
Welche AHK Version benutzt du?
Recommends AHK Studio
User avatar
Gucky_87
Posts: 375
Joined: 03 Jul 2014, 05:09

Re: object.Close() klappt nicht (Win10)?

23 Nov 2017, 08:07

Ich benutze die aktuelle Version 1.1.26.1 und kann es reproduzieren. Solange ich die Routine nicht aufrufe, ist alles normal.
Wenn ich sie 1x aufgerufen habe, ist die entsprechende Datei gesperrt.
Ach ja, ich lasse das Script selber (und damit auch AHK) mit Adminrechten laufen.
Ich benutze aktuell Win10 Pro 64 Bit, werde es heute Abend aber mal unter Home und Win7 testen.

Vielleicht sollte ich noch erwähnen, dass ich ausschließlich Dateien mit dieser Routine durchsuche, die auf SD Karten (Wecheldatenträgern) liegen. Vielleicht hängt es ja auch damit zusammen, obgleich ich mir das nicht wirklich vorstellen kann.
Der Schreibschutz dieser SD Karten ist nicht aktiv,daran hatte ich auch schon gedacht ;D
just me
Posts: 9424
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: object.Close() klappt nicht (Win10)?

23 Nov 2017, 10:16

Moin!
Ach ja, ich lasse das Script selber (und damit auch AHK) mit Adminrechten laufen.
  1. Gibt es dafür einen Grund, der mit den Dateien zu tun hat?
  2. Hast Du auch versucht, die Dateien nach dem Lesen ebenfalls mit Adminrechten zu löschen, verschieben, etc.?
  3. Zeigt Dir das Dateisystem der SD-Karten die Zugriffsrechte (vorher/nachher) an?
nnnik hat recht. Eigentlich ist das File.Close() innerhalb der Funktion überflüssig, wenn das FileObjekt nicht global oder statisch ist. Ich schreibe es trotzdem immer rein, um die Aktion erkennbar zu machen.
User avatar
Gucky_87
Posts: 375
Joined: 03 Jul 2014, 05:09

Re: object.Close() klappt nicht (Win10)?

23 Nov 2017, 10:56

Zu 1) Ja, da ich z.B. im Programmordner, der auf C:\Programme... liegt, Dateien (z.B. eine INI mit Einstellungen) schreibe, was ohne Adminstatus (Win10) nicht geht. Außerdem wird beim 1. Start des Scriptes ein Unterordner angelegt, in den per Fileinstall eine Datei gelegt wird.
Selbst in Ordnern, die auf einer anderen Partition liegen, kann man ja nicht alle Dateioperationen ausführen, ohne, dass einem das UAC Stöcke zwischen die Beine wirft.
Mit den zu lesenden Dateien von der SD Karte hat es nichts zu tun. Die könnte ich auch ohne Adminrechte nutzen, da ich nur lese.

Zu 2) Das Script selber kann es nicht (obwohl ja im Adminmodus läuft). Ich kanns aber auch nicht. Nur, wenn ich mich zum "Superoberadmin" mache, klappt das.

Zu 3) Was meinst Du genau? Rechtsklick / Eigenschaften......? Hab gerade ´nen Nagel im Kopp XD
just me
Posts: 9424
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: object.Close() klappt nicht (Win10)?

23 Nov 2017, 11:29

Rechtsklick -> Eigenschaften -> Sicherheit

Welches Dateisystem haben Deine SD-Karten?
User avatar
Gucky_87
Posts: 375
Joined: 03 Jul 2014, 05:09

Re: object.Close() klappt nicht (Win10)?

23 Nov 2017, 12:01

FAT 32. Das wird vom beschreibenden System vorgegeben, sollte aber kein Problem darstellen, oder?

Noch ein Nachtrag:
Es funktioniert auch nicht unter Windows7 Pro 64 Bit, einem Win10 Home 64 Bit und auf einem 2. Win 10 64 Bit PC.
Von daher gehe ich fast davon aus, dass das ein Rechteproblem ist, wobei mir einfällt...
Nur die spätere EXE wird in C:\Programme installiert, das Script ist in nicht compilierter Form in einem völlig anderen Ordner.
just me
Posts: 9424
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: object.Close() klappt nicht (Win10)?

24 Nov 2017, 03:47

Bei FAT32 sollte man ein Rechteproblem auf der SD-Karte abhängig vom Benutzer ausschließen können. Mehr fällt mir jetzt nicht ein.
User avatar
Gucky_87
Posts: 375
Joined: 03 Jul 2014, 05:09

Re: object.Close() klappt nicht (Win10)?

24 Nov 2017, 05:57

So sehe ich das auch.
Ich hab es gestern Abend noch etliche Male auf allen meinen Rechnern getestet.
Auch, wenn ich die Dateien von der SD Karte auf eine Platte kopiere, ändert sich dieses merkwürdige Verhalten nicht.
Ich verstehe das nicht.
Ich werde heute Abend mal diese Routine in ein separates Script bauen und für sich alleine testen.
Mag ja sein, dass in meinen, inzwischen 8000+ Zeilen langen Script der Fehler an anderer Stelle steckt, wo ich jetzt
gar nicht dran denke.

Trotzdem lieben Dank für Deine/Eure Hilfe.

Gucky.
just me
Posts: 9424
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: object.Close() klappt nicht (Win10)?

24 Nov 2017, 05:59

Viel Glück!
User avatar
Gucky_87
Posts: 375
Joined: 03 Jul 2014, 05:09

Re: object.Close() klappt nicht (Win10)?

27 Nov 2017, 06:04

Kurze Info: Ich habe den Fehler gefunden.
Ich mag´s kaum sagen, aber die Routine läuft wirklich einwandfrei, der Fehler lag wieder mal an dem, der 20cm vor dem Monitor sitzt und gedankenverloren auf der Tastatur rumklimpert :D

Die Ursache war, dass ich diese Routine nochmals an anderer Stelle im Script aufrufe, was ich natürlich völlig übersehen hatte, und dort vor dem Öffnen durch die Routine das File selber mit .fileopen() öffne, dabei aber vergessen habe, es mit .close() zu schließen.

Daher nochmals Danke, auch wenn mir dabei verständlicherweise keiner wirklich helfen konnte.

Gucky.
just me
Posts: 9424
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: object.Close() klappt nicht (Win10)?

27 Nov 2017, 06:20

Moin,

falls es Dir aus Deiner Depression hilft: So ziemlich alle Fehler in den Skripten werden durch den Programmierer eingebaut. ;)

Computer sind nun mal doof. Sie machen Alles, was man Ihnen sagt, ohne auch nur ansatzweise darüber nachzudenken, ob das Sinn macht.
User avatar
Gucky_87
Posts: 375
Joined: 03 Jul 2014, 05:09

Re: object.Close() klappt nicht (Win10)?

27 Nov 2017, 06:57

:D :D :D

Und nicht nut in (AH) Scripten :P ;D
Manchmal frage ich mich, ob es nicht klüger wäre, würden wir "denken" wie Computer - Nämlich gar nicht........

Gucky.

Return to “Ich brauche Hilfe”

Who is online

Users browsing this forum: No registered users and 22 guests