Announcement

Collapse
No announcement yet.

Schreibschutz setzen und aufheben

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

  • #31
    Originally posted by gfoidl View Post
    Hallo Gü, guten Morgen!

    Das habe ich wohl tatsächlich doch übersehen, denn den Satz "Um dem ein Ende zu setzen" hätte ich wohl nicht vergessen.

    Trotzdem klappt's immer noch nicht!

    Ich weiß nicht weshalb, aber in Deinem Code ist plötzlich ab "Friend WithEvents" ein Code aufgetaucht, von dem ich nicht weiß, wie er da hin kommt.
    Ich habe wohl in "Form1.vb(Entwurf)" ein OpenFileDialog- Steuerelement eingefügt, weil dazu vorher Fehlermeldungen kamen, die danach weg sind.

    [highlight=vb.net]
    Imports System
    Imports System.IO
    Imports System.Windows.Forms

    Namespace WindowsFormsApplication1

    Partial Public Class Form1
    Inherits Form
    Public Sub New()
    InitializeComponent()
    End Sub
    Private Sub button1_Click(ByVal sender As Object, ByVal e As EventArgs)


    If OpenFileDialog1.ShowDialog() = DialogResult.OK Then

    Dim path As String = OpenFileDialog1.FileName
    SetReadOnly(path, False)
    End If
    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
    Friend WithEvents OpenFileDialog1 As System.Windows.Forms.OpenFileDialog

    Private Sub InitializeComponent()
    Me.OpenFileDialog1 = New System.Windows.Forms.OpenFileDialog
    Me.SuspendLayout()
    '
    'OpenFileDialog1
    '
    Me.OpenFileDialog1.FileName = "OpenFileDialog1"
    '
    'Form1
    '
    Me.ClientSize = New System.Drawing.Size(292, 268)
    Me.Name = "Form1"
    Me.ResumeLayout(False)

    End Sub
    End Class
    End Namespace
    [/Highlight]

    Jetzt steht zwar kein Fehler mehr an, aber mit Betätigen des Buttons passiert auch nichts.

    Wenn ich hinter

    [highlight=vb.net]
    Private Sub button1_Click(ByVal sender As Object, ByVal e As EventArgs)
    [/highlight]

    "Handles buttons.Click" einfüge, wie ich das sonst kenne, dann kommt zu diesem button1 die Meldung:
    "Die Handles-Klausel erfordert eine With-Events-Variable, die im enthaltenen Typ oder einem seiner Basistypen definiert wird."

    Ich nehme an, Dir sagt das was, mir nicht!

    Wenn ich das ab "Friend WithEvents" bis End Sub lösche, dann gibts auch wieder Fehlermeldungen zu "OpenFileDialog1"

    vG

    fredyx

    Comment


    • #32
      1. Erstelle ein neues Winforms-Projekt
      2. in Form1 füge einen OpenFileDialog hinzu
      3. in Form1 füge einen Button hinzu
      4. mach einen Doppelklick auf diesen soeben hinzugefügten Button -> damit erstellt der Designer automatisch die Ereignisbehandlungsmethode für das Click-Eregnis
      5. kopiere diesen Code innerhalb des soeben vom Designer erstellten Codes
        [highlight=vbnet]
        If OpenFileDialog1.ShowDialog() = DialogResult.OK Then
        Dim path As String = OpenFileDialog1.FileName
        SetReadOnly(path, False)
        End If
        [/highlight]
      6. in dem soeben von dir eingefügten Code wird die Sub SetReadOnly aufgerufen, diese ist noch nicht in den Code kopiert, wie das geht erfährst du nach der nächsten Maus
      7. kopiere
        [highlight=vbnet]
        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
        [/highlight]
        in den Code von Form1 nach dem letzten End Sub und vor End Class, also dazwischen
      8. Drücke F5 umd das Projekt zu erstellen (kompilieren) und zu starten


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

      Comment


      • #33
        Hallo Gü,

        schön, dass Du Deinen Humor bei diesem Thema noch nicht verloren hast.

        Nach dem ich noch die Sache mit

        [highlight=vb.net]
        Imports System
        Imports System.IO
        Imports System.Windows.Forms
        [/highlight]

        davor gesetzt habe, klappt das Aufheben des Schutzes nun!!!

        Im Wesentlichen ist das ganze Programm mit den Zugriffen auf EXCEL so wie ich es mir vorgestellt habe, eigentlich schon fertig. Aber dann kommt einem ja doch wieder die eine oder andere Idee es noch zu optimieren.

        Auf jeden Fall hätte ich das ohne Deine Hilfe nicht geschafft, wofür ich Dir an dieser Stelle mal ganz herzlich danken möchte.

        vG

        fredyx

        Comment


        • #34
          Hallo zusammen,

          für alle, die eine ähnliche Frage haben, hier noch eine kurze Rückmeldung.

          Alles was ich zur Lösung meines Problems brauchte, sah so aus:

          [highlight=vb.net]

          Imports System
          Imports System.IO
          Imports System.Windows.Forms
          'Das muss vor Public Class .... stehen


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


          'Schreibschutz der Datei "lizok.ffd" aufheben
          Dim fi As New FileInfo(Application.StartupPath & "\lizok.ffd") 'alle Dateiinfos sind jetzt in der Liste fi enthalten
          Dim attr As FileAttributes = fi.Attributes

          attr = attr And Not FileAttributes.ReadOnly
          fi.Attributes = attr 'hier wird das Attribut "Schreibschutz" aufgehoben

          'Zeile in die Datei schreiben
          Try
          FileOpen(1, Application.StartupPath & "\lizok.ffd", OpenMode.Output)
          PrintLine(1, "vgz7j")
          FileClose(1)
          Finally
          'Schreibschutz der Datei "lizok.ffd" wieder einschalten
          attr = attr Or FileAttributes.ReadOnly
          fi.Attributes = attr 'hier wird das Attribut "Schreibschutz" aufgehoben
          End Try

          End Sub

          [/highlight]

          Damit habe ich erreicht, dass ich von einer schreibgeschützten Datei den Schreibschutz aufhebe, etwas in die Datei schreibe und anschließend den Schreibschutz wieder setze.

          vG

          fredyx
          Zuletzt editiert von gfoidl; 25.11.2008, 16:10. Reason: Try-Finally hinzugefügt

          Comment


          • #35
            Wenn ich jetzt gemein wäre würde ich fragen was passiert wenn das Schreiben in die Datei einen Fehler verursacht?

            Die Datei würde ohne Schreibschutz bleiben. Abhilfe schafft hier Try-Finally. Wobei das Setzten des Schreibschutzes im Finally-Block zu erfolgen hat.

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

            Comment


            • #36
              Hallo Gü,

              Du warst ja mal wieder schneller als der Schall!!

              Das find ich garnicht gemein, weil ich das in meinem wirklichen Programm mit Try Catch und einer Fehlermeldung abgesichert habe.

              Nur der Übersichtlichkeit wegen habe ich das hier weggelassen.

              vG

              fredyx

              Comment


              • #37
                Ich habs aus pädagogischen Zwecken hinzugefügt. Wenn - wie deine Absicht ja ist - jemand daraus was lernen soll dann auch richtig. Es ist zB auch nicht korrekt dass in der MSDN dies immer vergessen wird - gerade Mircosoft sollte mit gutem Beispiel vorangehen. Sieht man als Besucher der MSDN immer nichts von der Fehlerbehandlung - und die verkompliziert nichts - weiß man auch nicht ob man das machen soll oder nicht.

                Deshalb machen wir das wenigstens korrekt.

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

                Comment

                Working...
                X