# Eine .htuser oder .htaccess als reine Textdatei unter Windows 10 mit visual-basic speichern.



## Raabun (8. Juni 2020)

Hallo Leute,
unter Windows 7 konnte ich mit folgenden Code:

```
Dim pfad As String = KonfSys.konf_system(2).pfad
        Dim file_name As String = pfad & ".htusers"

        Dim anz As Integer = user.Length
        Dim i As Long
        err = 0
        Try
            Dim fi As FileInfo = New FileInfo(file_name)
            If fi.Exists Then
                fi.CopyTo(pfad & "htusers:TXT", True)
                fi.Delete()
            End If
            ...
         Catch ex as Exception
```

Ein .htuser oder ein .htaccess File kopieren.
Unter Windows 10 bekomme ich eine "Zugriffsverweigerung" Was tun?
Gruß
Raabun


----------



## ComFreek (8. Juni 2020)

Warum ist da ein Doppelpunkt bei "htusers:TXT". Sind Doppelpunkte ein Dateinamen unter Windows erlaubt?


----------



## Raabun (8. Juni 2020)

Ich hasse die Caps-Lock-Taste  Die Datei soll natürlich htusers.txt heißen.
Ich speicher zur Zeit die Datei .htusers/.htaccess in einem eigenem Backup-Ordner (ohne Typänderung, das geht)
Bei dem Zurückschreiben in den alten Code für diese Anfrage kam es zum Fehler. Seit 2004 lief der alte Code, halt bis Windows 10.
Gruß
Raabun


----------



## ComFreek (8. Juni 2020)

Heißt das nun, dass es mit Punkt geht?


----------



## Raabun (8. Juni 2020)

Nein, bei allen Windowsversionen inkl Windows7 (außer NT, Vista und Windows 8, die ich nicht getestet habe) funktioniert der Code mit htusers.txt (Ursprung war 2004).
Nur bei Windows 10 bekomme ich den Fehler, wenn ich den Tp der Datei ändere (von .htusers auf htusers.txt)
*Der Doppelpunkt TXT) war ein Schreibfehler beim Erstellen der Anfrage. Als Code wurde die Endung so nie verwendet.*
Gruß
Raabun


----------



## ComFreek (8. Juni 2020)

Das ist sehr komisch. Ich weiß, dass der Windows Explorer dich nicht so einfach Dateien ohne Namen (also nur Endung ".htusers") erstellen lässt*. Aber ich hätte gedacht, dass das _nicht_ in der Windows API durchgesetzt wird.

Kannst du vielleicht in einem frischen neuen Projekt testen, ob du Dateien mit solchen Dateinamen erstellen kannst?

*) siehe auch How do I manually create a file with a . (dot) prefix in Windows? For example, .htaccess.


----------



## Raabun (8. Juni 2020)

Ich kann .htusers und .htaccess erstellen. Die Dateien sind ja garnicht mal so unüblich und dienen der Zugangskontrolle von HTML-Webseiten. Ich kann auch htusers.txt oder htaccess.txt erstellen. Was mir nur nicht mehr gelingt ist das Ändern einer .htusers Datei in eine htusers.txt Datei. Beides sind reine ASCII-Textdateien ohne jegliches Bohei wie utf etc.
Dein Link beschreibt den Vorgang ganz gut. Nur hatte früher .net mir den Trara mit " dann wird die Datei unbrauchbar" etc erspart und es mir überlassen damit zu leben. Was gut ging, da die "Unbrauchbarkeit" der neuen Datei mir recht war, da sie nur ein Backup für mich sein sollte, falls da mal einer der User Mist gebaut hat.

Gruß
Raabun


----------



## ComFreek (8. Juni 2020)

Kannst du die Datei manuell mit dem Explorer denn umbenennen? Irgendwie bezweifel ich, dass es tatsächlich am Punkt liegt. Ich denke, die bestehende (?) .htusers hat bestimmte Zugriffsrechte gesetzt bekommen -- von woher auch immer.


----------



## Spyke (9. Juni 2020)

Bei mir gehts, es muss, denke ich, an den Berechtigungen des Ordners liegen auf den du zugreifen willst.
Vielleicht wurde da was geändert.

Gib mal die genaue Fehlermeldung.


----------



## Raabun (9. Juni 2020)

Hallo Leute,
noch einmal der Code, der zur Zeit auf Windows10 fehlerfrei läuft. Auch öfters hintereinander.
ComFreak, wie Du siehst kann ich die Datei .htusers anlegen, copieren, löschen und überschreiben. Nur den Typ kann ich nicht ändern. Die Abfragen von Windows werden, meines Wissens nach, durch das "TRUE" im CopyTo-Befehl abgehandelt.

Allgemeine Frage: Gibt es eine Art der Berechtigung, die das Umbenennen verbietet, wenn ich die Datei anlegen, löschen und überschreiben kann?

Gruß
Raabun


```
Private Sub create_htusers(ByVal user() As CL_User, ByRef err As Long)
        Dim pfad As String = KonfSys.konf_system(2).pfad
        Dim file_name As String = pfad & ".htusers"

        Dim anz As Integer = user.Length
        Dim i As Long
        err = 0
        Try
            Dim fi As FileInfo = New FileInfo(file_name)
            If fi.Exists Then
                fi.CopyTo(pfad & "Backup\.htusers", True)
                fi.Delete()
            End If

            fi = New FileInfo(file_name)
            Using w As StreamWriter = File.AppendText(file_name)
                w.Write("# Benutzerdatei fuer Web-Projekt:" & ControlChars.CrLf)
                w.Write("# Sie wird automatisch erzeugt, nicht aendern" & ControlChars.CrLf)
                For i = 0 To anz - 1
                    WriteUser(user(i), w)
                Next

                ' Close the writer and underlying file.
                w.Close()
            End Using
        Catch ex As Exception
            SystemFileHandling.LogData("create_htusers: " & ex.Message, start.konsole, start.konsole, CL_Error.ERR_SYSTEM_BUILD_USERS)
            err = -1
        End Try


    End Sub
```


----------



## Spyke (9. Juni 2020)

Wie ist die genaue Fehlermeldung?

Ansonsten die Datei könnte Schreibgeschützt sein oder es besteht kein recht auf Ändern, Lesen, Schreiben etc.

Bei mir funktionierts, wenn ich aber die Datei zum Beispiel als Schreibgeschützt setze bekomme ich auch ein Zugriffverweigert.

.htuser oder htuser.text beide entsprechend prüfen (und Ordner)


----------



## Spyke (9. Juni 2020)

Ehm kanns auch sein das es am Delete liegt, wo es kracht?
Ist es richtig das du .htusers aus dem Originalordner löschen willst?

Es könnte jetzt natürlich auch sein das .htusers durch ein anderes Programm verwendet wird und dieses Programm nur für andere Programme erlaubt diese Datei lesend zu öffnen.


----------



## Raabun (9. Juni 2020)

Hallo Spyke,
Ja, es ist richtig, das ich .htusers aus dem Originalordner lösche und später ein neues .htusers an der gleichen Stelle erzeuge. Dieser Teil des Programms funktioniert einwandfrei.
Vor dem Löschen will ich ein Backup dieses Files erzeugen.
Einfach nur Umbenennen in htusers.txt geht nicht. Darum mußte ich nun einen Backup-Ordner erzeugen und dort das File als .htusers ablegen. Geht auch, aber ist halt ein Ordner mehr. Und vor allen Dingen eine neue Version, die nicht mehr kompatibel ist zur alten Software. Da unsere Software meist länger als 10 Jahre läuft, wird der Aufwand immer größer 

Raabun


----------



## Spyke (9. Juni 2020)

Bleibt nur Berechtigungen der user prüfen welche diese programmlogik auslösen.

Und prüfen ev. ist htusers.txt durch ein anderes programm im Zugriff welches nur einen eingeschränkten Zugriff der Datei für andere programme erlaubt.
Ganz blöd vielleicht auch Virenscanner.

IT sollte mal prüfen ob ev ein anderes programm die Datei sperrt und natürlich Berechtigungen.

Normal sollte eigentlich gehen was du vor hast.


----------



## ComFreek (9. Juni 2020)

Es kann auch sein, dass direkt nach Erstellung ein Prozess die Datei öffnet und geöffnet hält. Das könntest du mit dem Tool LockHunter herausfinden.


----------

