# Werte dauerhaft speichern



## Florianrau (7. Februar 2005)

Hallo zusammen ich bin vb anfänger und hab da mal ne Frage.
Ich Habe in meinem Formular eine Options Funktion beider ich 
die Formularfarbe ändern kann. Nun möchte ich das die einstellung dauerhaft bleibt und nicht nach jedem neustart des programms wieder auf standart eingestellt ist.

Ich hoffe Ihr könnt mir helfen

MFG FLO


----------



## Vektor (7. Februar 2005)

Erstell einfach beim ändern der Farbe, oder beim beenden des Programms eine Datei in dem die Werte gesichert werden. Es reicht ja ne einfache datei die z. B. den Farbwert beinhaltet, oder nur einen Wert, der halt in deinem Programm für die identifizierung der Farbe steht. Dann musst du nur noch im Form_Initialize Ereignis deines Programms, die datei auslesen, und den Farbwert entsprechend setzen.


----------



## Florianrau (7. Februar 2005)

Danke für die flotte Antwort

Hab ich mir schon gedacht das das prog eine Datei erstellen muss in der die werte gespeichert werden das Prob ist halt eben wie ich das in die Tat umsetze.
wenn ich ein Beispiel hätte könte ich mir das wesentliche raus suchen.


MFG


----------



## Vektor (7. Februar 2005)

Also, um eine Datei zu erstellen machst du folgendes.


```
Dim Pfad as String

Pfad = "C:\Verzeichnis\Dateiname.txt" 

'Dann erstellen wir die Datei
'Sollte sie bereits bestehen, wird sie überschrieben

Open Pfad for Output as #1

'Jetzt schreibst du den Wert rein

Print #1, "Farbwert"

'Und schließt die Datei wieder um sie freizugeben

Close #1

---------------------------------

'Dann musst du im Form_Initialize die Datei wieder öffnen

Dim Farbwert as String

Open Pfad for Input as #1

'Du liest den Wert aus

Farbwert = Line Input #1

'Du schließt die Datei wieder

Close #1

'Und dann kannst du wieder weiterarbeiten.
```

Hoffe es hilft dir...


----------



## Florianrau (7. Februar 2005)

Danke werde es direckt ausprobieren
MFG


----------



## Filone (7. Februar 2005)

Falls das nicht so funktioniert wie gewünscht kannst Du es in einer .ini speichern und mit

WritePrivateProfileString / ReadPrivateProfileString

die Werte setzen oder lesen.

Alternativ gibt es noch Propertybags, die kannst Du mit WritePropertyBag oder ReadPropertyBag schreiben / lesen.

Zu beidem sind Codebeispiele und Anleitungen auf msdn.de, ich habe auch noch einen Beispielcode den ich Dir uppen kann.


----------



## Shakie (9. Februar 2005)

> Alternativ gibt es noch Propertybags, die kannst Du mit WritePropertyBag oder ReadPropertyBag schreiben / lesen.


Was ist denn das, eine "Propertybag"?


----------



## Filone (10. Februar 2005)

Bei einem PropertyBag werden Daten gespeichert, indem automatisch eine neue .pbg-Datei erstellt wird.

Dort werden dann die Daten mit Read- bzw WritePropertyBag geschrieben / gelesen.

Hier die MSDN dazu : http://msdn.microsoft.com/library/d...ry/en-us/vb98/html/vbobjpropertybagobject.asp

Ich finde es sehr nützlich, z.B. wenn es wie hier um die Einstellungen der Farben, Checkboxes etc. geht.


----------



## Shakie (10. Februar 2005)

Wenn ich das also richtig verstanden habe kann ein PropertyBag alle Einstellungen eines Steuerelements auf einmal speichern, oder? Wo bekomme ich denn ein PropertyBag her? (Welche Verweise/Komponenten?)


----------



## Filone (12. Februar 2005)

```
'Dim pBag As New PropertyBag' 

pBag.ReadProperty / pBag.WriteProperty
```

wenn ich mich nicht irre, ich müsste nochmal nachschauen Shakie.


----------



## Shakie (12. Februar 2005)

@Filone: Also das Speichern und Laden (mittels PropertyBag) von einer PictureBox bzw. dem Bild in einer PictureBox habe ich nun hinbekommen, aber Einstellungen wie "BackColor" werden nicht mit gespeichert. Ich hatte das so verstanden, dass alle Einstellungen eines Objekts auf einmal gespeichert werden...Hab ich in meinem Code evtl. nur Mist geschrieben oder wird pro "WriteProperty" nur eine Eigenschaft gespeichert?
Mein Code sieht einfach so aus:
	
	
	



```
Dim Test As New PropertyBag
Test.WriteProperty "MeinTestName", Me.Picture1
```


----------



## yan1 (16. Februar 2005)

Vektor hat gesagt.:
			
		

> Also, um eine Datei zu erstellen machst du folgendes.
> 
> 
> ```
> ...


 Hi leute, bei mir erscheint dieser Fehler: Pfad nicht gefunden
Muss die Textdatei die man öffnen will schon vorhanden sein?
Wenn ja, wie erstelle ich eine?
cu, yan1


----------



## yan1 (16. Februar 2005)

tja, jetzt  bei mir auch, doch mein problem ist, dass zwar die datei nicht existieren muss, aber der ordner.
Ich hab das jetzt mit mkdir "C:\...." gemacht, aber da müsste ich abfragen, ob der ordner schon vorhanden ist.

Gibt es einen Befehl, um zu überprüfen ob ein Ordner oder eine Datei soch existiert


----------



## Vektor (17. Februar 2005)

Das geht am einfachsten mit dem FileSystemObject

So überprüfst du ob der Ordner existiert, wenn nicht dann erstellst du ihn.
Anschließen einfach die Textdatei erzeugen. Du könntest das auch mithilfe des FSO und eines TextStreamObjects machen, geht aber genauso mit den VB Standardkommandos.

Um ein FSO verwenden zu können musst du unter "Verweise" die "Scripting Runtime Bibliothek" einbinden (scrrun.dll).


```
'Zuerst erstellst du global ein FileSystemObject

Public fso as new FileSystemObject
-------------------------------------------
Dim Pfad as String

Pfad = "C:\Verzeichnis"

'Nun überprüfen wir mit dem FSO ob das verzeichnis existiert

    If fso.FolderExists(Pfad) = False Then
'Erstellen des Ordners
        fso.CreateFolder (Pfad)
        'Schreiben der Datei
    else
        'Schreiben der Datei
    End If
```


----------



## yan1 (17. Februar 2005)

Danke Vektor, das mit dem FileSystemObject ist echt super, Mit dem kann man eigentlich alles im Bereich Datei System machen!


----------



## Nico192 (29. Mai 2006)

Hab da noch ne Frage, weil ich grad das gelesen hatte:


> 'Sollte sie bereits bestehen, wird sie überschrieben



Was muss ich wo ändern, damit die Datei nicht überschrieben wird?

Danke 

.:GReetz N!C0


----------



## Vektor (29. Mai 2006)

Hallo, 

leider weiß ich nicht mehr ob es da im FileSystemObject ein Attribut gibt, welches dies automatisiert, da ich auf .NET umgestiegen bin, aber du kannst einfach in einer If-Abfrage überprüfen ob die Datei schon existiert:

```
If FSO.FileExists(Pfad) = True then
    ' Anderen Dateinamen nehmen
    ' Datei schreiben
else
    ' Datei schreiben
End If
```
Bis dann..


----------



## RamonR (30. Mai 2006)

Hallo,

um festzustellen ob eine Datei bereits existiert, kannst Du folgende Funktion verwenden:


```
public Function FileExists(FileName As String) As Boolean
    If FileName <> "" Then
        FileExists = (Dir$(FileName) <> "")
    Else
        FileExists = False
    End If
End Function
```

Als Übergabeparameter gibst Du die fragliche File (mit Pfad) an. Als Rückgabewert bekommst Du

TRUE, wenn die Datei vorhanden ist
FALSE, falls die Datei nicht vorhanden ist

Beispiel:


```
If FileExists("c:\test.txt") = True then
 ' anderen Dateinamen nehmen
 ' Datei schreiben
else
 ' Datei schreiben
endif
```


----------



## solae (21. März 2007)

Hi zusammen. Ich versuche auch noch einige Variablen in eine Datei zu speichern.

Doch wie mach ich das wenn ich mehr als eine Variable habe?

Muss ich jedesmal die 3 Befehle verwenden?


> Private Sub Command1_Click()
> Dim Pfad As String
> 
> Pfad = "C:\Dateiname.txt"
> ...



Und 2. Das öffnen funktioniert nicht:


> Dim Farbwert As String
> 
> Open Pfad For Input As #1
> 
> ...



Da kommt jedesmal "Syntax Error"


----------

