Announcement

Collapse
No announcement yet.

Schreibschutz setzen und aufheben

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Schreibschutz setzen und aufheben

    Guten Abend an die, die noch wach sind!

    Hier meine Frage:

    Wie kann ich aus VB 2005 heraus den Schreibschutz, den man über die Eigenschaften einer beliebigen Datei setzen kann, wieder aufheben, bzw. wieder setzen?

    vG

    fredyx

  • #2
    Hallo,

    also lt. VB 2005 Kompendium geht das mit FileInfo und (File)Attributes
    MfG
    Cheat-Sheets for Developers / Programming Quotes

    Comment


    • #3
      GetFileAttributes
      SetFileAttributes

      Der WIN API
      Christian

      Comment


      • #4
        Danke an Euch beide, ich werde es probieren!

        vG
        fredyx

        Comment


        • #5
          Ich habe es versucht, komme aber leider nicht klar damit.

          Die Idee ist wohl richtig, aber wie sieht das konkret aus, wenn ich wissen will, ob die Datei xy.doc im Ordner abc geschützt ist und wie , wenn ich bei dieser Datei den Schutz aufheben will?

          vG

          fredyx

          Comment


          • #6
            Die SDK-Doku/MSDN hat doch schon ein schönes Beispiel unter File.SetAttributes-Methode. Das solltest Du übernehmen; wenn Du damit nicht klar kommst, dann beschreibe bitte möglichst konkret (mit Code-Auszug) Dein Vorgehen und die Probleme. Jürgen

            Comment


            • #7
              Originally posted by Jürgen Thomas View Post
              Die SDK-Doku/MSDN hat doch schon ein schönes Beispiel unter File.SetAttributes-Methode. Das solltest Du übernehmen; wenn Du damit nicht klar kommst, dann beschreibe bitte möglichst konkret (mit Code-Auszug) Dein Vorgehen und die Probleme. Jürgen
              Hallo Jürgen,

              offensichtlich fehlen mir zur Umsetzung solcher Beispiele in VB Studio 2005 einige wesentliche Grundkenntnisse.


              Ich nehme dieses Beispiel:

              [highlight=vb.net]
              Imports System
              Imports System.IO
              Imports System.Text

              Public Class Test
              Public Shared Sub Main()
              Dim path As String = "c:\temp\MyTest.txt"
              ' Delete the file if it exists.
              If File.Exists(path) = False Then
              File.Create(path)
              End If

              If (File.GetAttributes(path) And FileAttributes.Hidden) = FileAttributes.Hidden Then
              ' Show the file.
              File.SetAttributes(path, FileAttributes.Archive)
              Console.WriteLine("The {0} file is no longer hidden.", path)
              Else
              ' Hide the file.
              File.SetAttributes(path, File.GetAttributes(path) Or FileAttributes.Hidden)
              Console.WriteLine("The {0} file is now hidden.", path)
              End If
              End Sub
              End Class
              [/highlight]

              und möchte das in meine Windows Form - Anwendung umsetzen, dann habe ich das so, aber auch mit einigen anderen Versuchen probiert und bekomme einige Fehlermeldungen

              [highlight=vb.net]
              Public Class Form1


              Public Shared Sub Main()
              Dim path As String = "c:\temp\MyTest.txt"
              ' Delete the file if it exists.
              If File.Exists(path) = False Then
              File.Create(path)
              End If

              If (File.GetAttributes(path) And FileAttributes.Hidden) = FileAttributes.Hidden Then
              ' Show the file.
              File.SetAttributes(path, FileAttributes.Archive)
              Console.WriteLine("The {0} file is no longer hidden.", path)
              Else
              ' Hide the file.
              File.SetAttributes(path, File.GetAttributes(path) Or FileAttributes.Hidden)
              Console.WriteLine("The {0} file is now hidden.", path)
              End If
              End Sub


              Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click


              End Sub


              End Class
              [/highlight]

              Ich habe es auch ohne Erfolg in einer Konsol-Anwendung probiert.

              Die Fehlermeldung kommt zu
              File und FileAttributes:

              >> der Name File wurde nicht deklariert!

              Wo muss ich da was und wie deklarieren?

              vG

              fredyx

              eine andere

              Comment


              • #8
                Hi fredyx,

                hab mal mein Bsp dazu nach Vb.net übersetzt (hoffe es funktioniert).

                [highlight=vbnet]
                Imports System.IO
                Imports gfoidl.Tools.IO

                Namespace Datei___Schreibschutz
                Public Class Program
                Public Shared Sub Main()
                Dim fi As New FileInfo("Test.txt")
                fi.SetReadOnly(False)
                End Sub
                End Class
                End Namespace

                Namespace gfoidl.Tools.IO
                Public Module FileExtensions
                Private Sub New()
                End Sub
                <System.Runtime.CompilerServices.Extension> _
                Public Sub SetReadOnly(ByVal fi As FileInfo, ByVal [readOnly] As Boolean)
                Dim attr As FileAttributes = fi.Attributes

                If [readOnly] Then
                attr = attr Or FileAttributes.[ReadOnly]
                Else
                attr = attr And Not FileAttributes.[ReadOnly]
                End If

                fi.Attributes = attr
                End Sub
                End Module
                End Namespace
                [/highlight]

                Darin wird im Namespace gfoidl.Tools.IO eine Erweiterungsmethode definiert die den Schreibschutz setzt/entfernt.
                [Einschub]
                Eine Erweiterungsemethode erweitert die bestehende Funktionalität einer Klasse.
                [/Einschub].

                mfG Gü
                "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

                Comment


                • #9
                  Hall Gü,

                  leider kann ich damit auch nicht klar kommen. Bei mir sieht das so aus:

                  [highlight=vb.net]
                  Imports System.IO
                  Imports gfoidl.Tools.IO
                  'Public Class Form1

                  Namespace Datei___Schreibschutz
                  Public Class Program
                  Public Shared Sub Main()


                  Dim fi As New FileInfo("Test.txt")
                  fi.SetReadOnly(False)
                  End Sub
                  End Class
                  End Namespace
                  Namespace gfoidl.Tools.IO


                  Public Module FileExtensions
                  Private Sub New()
                  End Sub
                  <System.Runtime.CompilerServices.Extension()> _
                  Public Sub SetReadOnly(ByVal fi As FileInfo, ByVal [readOnly] As Boolean)


                  Dim attr As FileAttributes = fi.Attributes
                  If [readOnly] Then

                  attr = attr Or FileAttributes.[ReadOnly]
                  Else
                  attr = attr And Not FileAttributes.[ReadOnly]
                  End If
                  fi.Attributes = attr
                  End Sub
                  End Module
                  End Namespace





                  'End Class

                  [/highlight]

                  1. Fehlermeldung bei "Imports gfoidl.Tools.IO"

                  2. bei "fi.SetReadOnly(False)" >> "SetReadOnly ist kein Member von System.IO.fileinfo"

                  3. bei "System.IO" >> "shared Sub New Kann nicht als Private deklariert werden"

                  4. bei "<System.Runtime.CompilerServices.Extension()> " >> der Typ .... ist nicht definiert


                  Ich kapiere überhaupt nicht, weshalb ich solche Probleme habe, wenn ich was übernehmen will? Was ist denn bei mir so anders?

                  Hängt das damit zusammen, dass ich das in einer Windowsanwendung versuche zu realisieren??


                  vG fredyx

                  Comment


                  • #10
                    Vielleicht liegt es daran dass deine .net-Version < 3.0 ist.

                    Anderer Weg:
                    [highlight=vbnet]
                    Imports System.IO

                    Namespace Datei___Schreibschutz
                    Public Class Program
                    Public Shared Sub Main(ByVal args As String())
                    Dim path As String = "Test"

                    SetReadOnly(path, True)
                    End Sub

                    Public Shared Sub SetReadOnly(ByVal path As String, ByVal yes As Boolean)
                    Dim fi As New FileInfo(path)
                    Dim attr As FileAttributes = fi.Attributes

                    If yes Then
                    attr = attr Or FileAttributes.[ReadOnly]
                    Else
                    attr = attr And Not FileAttributes.[ReadOnly]
                    End If

                    fi.Attributes = attr
                    End Sub
                    End Class
                    End Namespace
                    [/highlight]

                    Hängt das damit zusammen, dass ich das in einer Windowsanwendung versuche zu realisieren??
                    Nein.

                    mfG Gü
                    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

                    Comment


                    • #11
                      Originally posted by gfoidl View Post
                      Vielleicht liegt es daran dass deine .net-Version < 3.0 ist.
                      Wo kann ich das erkennen?

                      Comment


                      • #12
                        Gib in der Adressleiste des Browsers
                        Code:
                        javascript:alert(navigator.userAgent)
                        ein. Die Meldung zeigt dir dann die CLR-Version an.

                        mfG Gü
                        "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

                        Comment


                        • #13
                          Anzeige für CLR ist 1.1; 2.0; 3.0; 3.5 compatible

                          Comment


                          • #14
                            Dann keine Ahnung warum es nicht geht bzw. keine Lust dem nachzugehen - ich will nicht VB.net 2008 installieren.

                            Verwende die Alternative die ich gepostet habe.

                            mfG Gü
                            "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

                            Comment


                            • #15
                              Hallo Gü,

                              Dein letzter Vorschlag bringt schon mal keine Fehlermeldung mehr und ich kann das Programm auch starten, aber sonst passiert nichts.
                              Warum auch?
                              Irgendwie muss ich das ganze ja anstoßen!!


                              Ich habe eine Form1 mit einem Button und Dein Code steht jetzt in Form1.vb*.

                              Wenn ich versuche Form1.vb*(Entwurf) zu öffnen, dann kommt folgende Meldung:

                              "Beim Laden des Designers sind die nachfolgend aufgeführten Fehler aufgetreten. Einige können durch Neuerstellen des Projekts behoben werden, andere erfordern möglicherweise Änderungen am Code."

                              "Die Klasse Form1 kann entworfen werden, ist aber nicht die erste Klasse in der Datei. Visual Studio erfordert, dass Designer die erste Klasse in der Datei verwenden. Verschieben Sie den Klassencode, sodass die Klasse an erste Stelle in der Datei rückt, und versuchen Sie, den Designer erneut zu laden."

                              Wo ist da der Wurm??

                              fredyx

                              Comment

                              Working...
                              X