![]() |
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 |
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. |
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.
|
Re: Speichern auf gemeinsam genutzem Netzwerkspeicher
Ich nutze ein tutorial von
Zitat:
meint ihr es geht wenn ich die datei beim eintragen neu lade? am anfang muss sie geladen werden damit sie angezeigt werden kann! |
Re: Speichern auf gemeinsam genutzem Netzwerkspeicher
Zitat:
Sonst ist die Datei gesperrt und keiner kann mehr Speichern. |
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? |
Re: Speichern auf gemeinsam genutzem Netzwerkspeicher
Zitat:
Zitat:
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... |
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:
das ist die procedure die beim einfürgen zur highscore aufgerufen wird!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; //.....
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 ?? |
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. |
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 11:03 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz