Seite 1 von 1

Problem mit CreateFile() [gelöst]

Verfasst: 14.02.2008 18:49
von Dezz
Hallo erstmal.
Ich habe folgendes Problem: ich habe ein Programm geschrieben, welches mit nem Editor Gadget aus dem die erste Zeile den Namen der Textdatei bildet und der restliche text in diese Datei gespeichert wird.Es wird aber, wenn ich als CreateFile()-Dateinamen eine Variable angebe, keine Datei gespeichert, wenn ich jedoch zB "Temp.txt" nehme funktioniert es.
Woran kann das liegen?
Hier mal der Code

Code: Alles auswählen

; PureBasic Visual Designer v3.95 build 1485 (PB4Code)

IncludeFile "Common.pb"

Open_Window_0()
HideWindow(#Window_0, 0)


SetGadgetColor(#Editor_0, #PB_Gadget_BackColor, RGB(70, 70, 70))
SetGadgetColor(#Editor_0, #PB_Gadget_FrontColor, RGB(235, 235, 235))
Pfad$ = ""     
Pfad$ = JHRegGetString(#HKEY_LOCAL_MACHINE,  "SOFTWARE\QuikkSave\", "Standardpfad")
If Pfad$ = "" 
If JHRegCreateKey(#HKEY_LOCAL_MACHINE, "SOFTWARE\QuikkSave\")
EndIf
If JHRegSetString(#HKEY_LOCAL_MACHINE,  "SOFTWARE\QuikkSave\", "Standardpfad", Pfad$)
EndIf
EndIf
If SetCurrentDirectory(Pfad$)
EndIf

Repeat ; Start of the event loop
  
  Event = WaitWindowEvent() ; This line waits until an event is received from Windows
  
  WindowID = EventWindow() ; The Window where the event is generated, can be used in the gadget procedures
  
  GadgetID = EventGadget() ; Is it a gadget event?
  
  EventType = EventType() ; The event type
  
  ;You can place code here, and use the result as parameters for the procedures
  
  If Event = #PB_Event_Gadget
    
    If GadgetID = #Editor_0
          
    ElseIf GadgetID = #Speichern
     Text$ = GetGadgetText(#Editor_0) 
     NameZeichen = FindString(Text$, Chr(13), 0)
     Name$ = Left(Text$,NameZeichen)
     Text$ = Mid(Text$, NameZeichen+2, Len(Text$)-Namezeichen+2) 
     
     If CreateFile(0,Name$+".txt")
     WriteString(0,Text$,#PB_Unicode)
     CloseFile(0)
     EndIf
     End
      
    ElseIf GadgetID = #Abbrechen
     End
      
    ElseIf GadgetID = #Speicherort
     Pfad$ = PathRequester("Bitte wählen Sie einen Pfad aus", Pfad$)
     If Pfad$
      MessageRequester("Als Standard", Chr(10)+Pfad$+" ist von nun an der Standardpfad, in den alle Notizen gespeichert werden", 0)
      SetCurrentDirectory(Pfad$)
      If JHRegSetString(#HKEY_LOCAL_MACHINE,  "SOFTWARE\QuikkSave\", "Standardpfad", Pfad$)
      EndIf    
     EndIf

      
    EndIf
    
  EndIf
  
Until Event = #PB_Event_CloseWindow ; End of the event loop

End
;
hoffe ihr könnt mir helfen, das ist zwar simpel, aber genau das was ich brauche...

Verfasst: 14.02.2008 18:54
von KeyKon
Überprüf doch einfach mal ob bei CreateFile die Variable name$ wirklich mit einem Gültigen Wert gefüllt is (einfach mal ein Debug einbauen und nachguggen)

Verfasst: 14.02.2008 19:02
von Dezz
HAb ich alles überprüft, wenn ich besipielsweise den Text:


Links
www.distrowatch.com
www.google.de

nehme, dann gibt Name$ "Links" und Text$ "www.distrowatch.com
www.google.de" aus.das passt schon, nur woran kann das liegen, ich bekomme auch keine fehlermeldung vom compiler, er speichert einfach keine datei.

Verfasst: 14.02.2008 20:28
von Kaeru Gaman
mach das ganze erstmal ohne der direktory-krempel am anfang.
evtl. speichert er die datei, du findest sie nur nich weil er sie sonstwo hinschreibt.

dazu kommt noch, dass Windows selber entscheidet, wann es etwas speichert,
also ggf. erst, wenn dein prog beendet wird.

generell ist CreateFile(0,Name$+".txt") korrekt und sollte ein nachvollziehbares ergebnis liefern.

Verfasst: 14.02.2008 20:36
von Dezz
:? Ne Sorry, muss dich enttäuschen, selbst wenn das programm einen festen pfad bekommt und nich auf dem wert in der registry basiert, und das programm anch speichern nicht beendet wird bekomme ich keine datei. nur wenn ich statt Name$ einfach nen festen namen nehme funktioniert das ganze,auch das speichern an den selbst ausgewählten platz!! nur wenn ich Name$ benutze funktioniert das ganze nicht...

Ich will nicht sagen, dass ich viel Ahnung habe, aber das Programm sollte doch eig einwandtfrei laufen...

Verfasst: 14.02.2008 20:43
von Kaeru Gaman
mach mal

Code: Alles auswählen

Name$+".txt"
If CreateFile(0,Name$)
draus.

außerdem nen doppelten requester, also

Code: Alles auswählen

Name$+".txt"
If CreateFile(0,Name$)
  WriteString(0,Text$,#PB_Unicode)
  CloseFile(0)
  MessageRequester("Meldung","gespeichert")
Else
  MessageRequester("Fehler","nicht gespeichert")
EndIf 
PS:
eigentlich wäre der doppelte requester die erste maßnahme,
bevor man die argument-synthese in eine andere zeile verlegt.

Verfasst: 14.02.2008 20:55
von Dezz
Okay, konnte nicht gespeichert werden..hmm und was sagt mir das jetzt?

Verfasst: 14.02.2008 20:59
von Kaeru Gaman
das du den Bug vor der Flinte hast.. hmmm *grübel*
ist aber ungewöhnlich...

wenn deine Stringoperation falsch ist, hast du ein #CR$ mit im Name$...
debug doch mal den Name$ nach der synthese,
wenn dort

Code: Alles auswählen

Links
.txt
bei herauskommt, hast du ein illegales zeichen im filenamen.
dann musst du NameZeichen dekrementieren, also

Code: Alles auswählen

     NameZeichen = FindString(Text$, Chr(13), 0) -1
oder so...

Verfasst: 14.02.2008 21:19
von Dezz
So, das habe ich ja schobn mit dem

Code: Alles auswählen

Name$ = Left(Text$,NameZeichen)
AHHH

nein, da muss ja noch ein -1 anhängen um den Zeilenumbruch da rauszukriegen...
Ja jetzt funktionierts...danke, hab da schon beim schreiben dran gedacht, aber irgendwie das -1 vergessen...

THX , nettes forum

Verfasst: 14.02.2008 21:27
von Kaeru Gaman
Dezz hat geschrieben:THX , nettes forum
:D so sind wir halt, das gehört dazu.
much fun mit PB :allright: