Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Speichern auf gemeinsam genutzem Netzwerkspeicher (https://www.delphipraxis.net/108024-speichern-auf-gemeinsam-genutzem-netzwerkspeicher.html)

Torley 6. Feb 2008 15:02


Speichern auf gemeinsam genutzem Netzwerkspeicher
 
Für die Schule habe ich ein Snake programmiert! Das besitzt unteranderem eine Highscore liste die in einer dat datei gespeichert wird!

in der schule hab ich den speicherort jetzt auf TMP einem Netzlaufwerk umgestellt.
ich als ersteller der datei auf tmp kann die highscore datei ohne probleme mit snake ändern bzw meine highscore hinzufügen. der rest der klasse jedoch bekommt die fehler meldung das die datei T:\...\highschore.dat nicht erstellt werden konnte obwohl sie existiert!

ich denke es liegt an den rechten der einzelnen benutzer!

meine frage:
kann ich delphi irgendwie sagen das alle die datei ändern dürfen und können oder muss ich mich an den schuladministratoren wenden der die datei freigibt?

torley

Jelly 7. Feb 2008 07:46

Re: Speichern auf gemeinsam genutzem Netzwerkspeicher
 
Für sowas sind Admins doch da. Wo kämen wir denn hin, wenn jedes x-beliebige Delphi Programm die Sicherheitsmechanismen von Windows umgehen könnte...

Wend dich doch mal an deinen Lehrer, vielleicht kannst du ja auch einen anderen Pfad nutzen.

mashutu 7. Feb 2008 08:42

Re: Speichern auf gemeinsam genutzem Netzwerkspeicher
 
Poste doch mal, wie die Datei geoeffnet wird. Ich hoffe Du machst die Datei nur dann auf, wenn Du sie brauchst und hinterher gleich wieder zu.

Torley 7. Feb 2008 12:55

Re: Speichern auf gemeinsam genutzem Netzwerkspeicher
 
Ich nutze ein tutorial von

Zitat:

http://www.delphi-library.de/topic_e...3cad20a9ce8a3a
Delphi-Library.de - ...eine HighScore Funktion realisieren?
Dort wird die datei bei oncreate geladen und bei jedem eintrag gespeichert!

meint ihr es geht wenn ich die datei beim eintragen neu lade?

am anfang muss sie geladen werden damit sie angezeigt werden kann!

RavenIV 7. Feb 2008 13:36

Re: Speichern auf gemeinsam genutzem Netzwerkspeicher
 
Zitat:

Zitat von Torley
Dort wird die datei bei oncreate geladen und bei jedem eintrag gespeichert!

meint ihr es geht wenn ich die datei beim eintragen neu lade?

am anfang muss sie geladen werden damit sie angezeigt werden kann!

Du solltest die Datei nach dem Lesen / Schreiben wieder schliessen, damit die anderen User auch Lesen / Schreiben können.
Sonst ist die Datei gesperrt und keiner kann mehr Speichern.

Torley 7. Feb 2008 14:22

Re: Speichern auf gemeinsam genutzem Netzwerkspeicher
 
wie schließe ich die datei den nach dem lesen und schreiben?
also müsst ich den code so umstellen das beim start die liste nur in die tstringlist gelesen wird und die datei dann wieder für andere freigegeben ist! und wenn dann jemand eine highscore gemacht hat muss ich wieder die datei laden lassen die highscore speichern und die datei anschließend wieder schließen!
läuft das dann?

RavenIV 7. Feb 2008 14:26

Re: Speichern auf gemeinsam genutzem Netzwerkspeicher
 
Zitat:

Zitat von Torley
wie schließe ich die datei den nach dem lesen und schreiben?

xyz.Close;
Zitat:

Zitat von Torley
also müsst ich den code so umstellen das beim start die liste nur in die tstringlist gelesen wird und die datei dann wieder für andere freigegeben ist! und wenn dann jemand eine highscore gemacht hat muss ich wieder die datei laden lassen die highscore speichern und die datei anschließend wieder schließen!
läuft das dann?

Man kann sich registrieren lassen, sodass man benachrichtigt wird, wenn sich eine Datei ändert.
Dazu gibt es auch Komponenten, die das übernehmen.
Such mal bei torry.net nach DirectoryMonitor oder DirMonitor.

P.S. Zeig doch mal ein Bisschen Code von den Stellen, wo Du die Datei liest und schreibst...

Torley 7. Feb 2008 14:47

Re: Speichern auf gemeinsam genutzem Netzwerkspeicher
 
Das wird bei start ausgeführt! wenn die datei existiert dann wird aus der gelesen wenn nicht wird c: genommen und wenn die nicht existiert wird sie erstellt (beim eintragen);
Delphi-Quellcode:
 
procedure TForm1.FormCreate(Sender: TObject);
//.....
HighScore := TStringList.Create;
if FileExists('T:\snake\highscore.dat')              
   then
    begin
     HighScorePfad := ('T:\snake\highscore.dat');    
     HighScore.LoadFromFile(HighScorePfad);
     csave:= false;
    end
   else
    if FileExists('C:\Programme\Snake\Highscore4.dat')
     then
      begin
       HighScorePfad := ('C:\Programme\Snake\Highscore4.dat');
       HighScore.LoadFromFile(HighScorePfad);
       csave:= true;
      end
     else
      begin
       HighScore.Add('005          Unknown');
       HighScore.Add('010          Unknown');
       HighScore.Add('015          Unknown');
       Highscorepfad:=('C:\Programme\Snake\Highscore4.dat');
      end;
//.....
das ist die procedure die beim einfürgen zur highscore aufgerufen wird!
Delphi-Quellcode:
procedure TForm1.FuegeZumHighScoreHinzu(Name : String; Score : Integer;
                                       Trennzeichen : Char; Trennzeichenmenge : integer;
                                       ScoreLength : integer);
var i : integer;
    ATrennzeichen : String;
    TempStrList : TStringList;
    AScore : String;
begin
 if HighScore.Count < 2 then Exit;
 // Es müssen mindestens 2 Einträge in der HighScoreliste bereits stehen
 if Trennzeichenmenge < 1 then Exit;
 // Weniger als ein Trennzeichen oder gar negative Trennzeichen sind nicht möglich
 for i := 1 to Trennzeichenmenge do
  begin
   ATrennzeichen := ATrennzeichen + Trennzeichen;
  end;
 // Unser Trenzeichenstring ist fertig
 AScore := intToStr(Score);
 while Length(AScore) <> ScoreLength do
  begin
   AScore := '0' + AScore;
  end;
 // Wir füllen die fehlenden Stellen im Score mit 0 auf. Damit alle Scorewerte in der Tabelle später
 // gleich lang sind. So kommt das Programm beim Sortieren nicht durcheinander, und es sieht besser aus
 TempStrList := TStringList.Create;
 // Wir erstellen eine zweite temporäre Stringlist, in der wir dann sortieren
 try
  for i := 0 to HighScore.Count-1 do
   begin    
    TempStrList.add(HighScore[i]);
   end;
  finally                      
   try
    TempStrList.add(AScore + ATrennzeichen + Name);
    TempStrList.Sort;
    //Sort ist eine sehr praktische Funktion der TStringList die wir benutzen
    HighScore.clear;
   finally
    try
     for i := (TempStrList.Count - 1) downto 0 do
      begin
       HighScore.add(TempStrList[i]);
      end;
      //hier fügen wir in umgekehrter Reihenfolgen die Werte aus der TempStringlist
      //in unsere HighScore Liste
      if csave=true then
       ForceDirectories('C:\Programme\Snake\');
      HighScore.SaveToFile(HighScorePfad); // Speichern nicht vergessen
   finally
    TempStrList.Free;
   end;
  end;
 end;
end;

ich müsste also beim schreiben die datei nochmal einlesen! und wie schieße ich sie beim start wieder?
einfach T:\...\highscore.dat.close ??

RavenIV 7. Feb 2008 14:58

Re: Speichern auf gemeinsam genutzem Netzwerkspeicher
 
Also.
LoadFromFile öffnet die Datei, liesst die Daten und schliesst die Datei wieder.
SaveToFile öffnet die Datei, schreibt die Daten und schliesst die Datei wieder.

Somit musst Du Dich um das Öffnen/Schliessen nicht kümmern.

Vor dem Speichern solltest Du die Datei neu einlesen.

P.S.
Siehst Du, damit man Dir weiterhelfen kann, braucht man Sourcecode.
Sonst stochert man im Nebel rum und führt Dich vielleicht auf eine falsche Fährte.

Torley 7. Feb 2008 15:25

Re: Speichern auf gemeinsam genutzem Netzwerkspeicher
 
das heißt das ich sie vor dem ändern nur neu laden muss?

ich kann das jetzt leider nicht ausprobieren weil ich dazu in die schule muss!

das klingt irgendwie so simple das ich das gefühl hab das die in der schule das trotzdem nicht speichern können! naja probieren geht über studieren


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:36 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz