AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign TMemFileStream - Ein Zwitter aus TMemoryStream und TFileStream
Thema durchsuchen
Ansicht
Themen-Optionen

TMemFileStream - Ein Zwitter aus TMemoryStream und TFileStream

Ein Thema von Sir Rufo · begonnen am 1. Nov 2010 · letzter Beitrag vom 1. Nov 2010
Antwort Antwort
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.399 Beiträge
 
Delphi 12 Athens
 
#1

AW: TMemFileStream - Ein Zwitter aus TMemoryStream und TFileStream

  Alt 1. Nov 2010, 18:06
Auf SetSize reagierst du nicht, also da sollte ja die Dateigröße angepaßt werden.

Wieso schneidest du das Ende des übergebenen Pfades ab?
Es würde mir nicht gefallen, wenn ein anderer Pfade verwendet würde, als ich angegeben hab.
Delphi-Quellcode:
if APath = 'then
  // Temp-Pfad holen
  Path := GetDirTemp
else
  Path := IncludeTrailingPathDelimiter( APath );
Ansonsten sieht es gibt aus, vorallem FILE_ATTRIBUTE_TEMPORARY und FILE_FLAG_DELETE_ON_CLOSE.

Als kleinen Schönheitsfehler, das Const in const Stream : TStream ist unnötig
und im Prinzip auch "falsch", da du den Stream, also .Position kurzzeitig veränderst.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu ( 1. Nov 2010 um 18:11 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: TMemFileStream - Ein Zwitter aus TMemoryStream und TFileStream

  Alt 1. Nov 2010, 18:23
Auf SetSize reagierst du nicht, also da sollte ja die Dateigröße angepaßt werden.
SetSize ist jetzt drin (hatte ich auch vermisst)
Wieso schneidest du das Ende des übergebenen Pfades ab?
Es würde mir nicht gefallen, wenn ein anderer Pfade verwendet würde, als ich angegeben hab.
Delphi-Quellcode:
if APath = 'then
  // Temp-Pfad holen
  Path := GetDirTemp
else
  Path := IncludeTrailingPathDelimiter( APath );
Ich hatte in einer vor-vor-version noch Aufrufe der Klasse mit einem Dateinamen und den wollte ich damit rausschneiden, also soweit ist dein Vorschlag da schon richtiger
Ansonsten sieht es gibt aus, vorallem FILE_ATTRIBUTE_TEMPORARY und FILE_FLAG_DELETE_ON_CLOSE.
merci
Als kleinen Schönheitsfehler, das Const in const Stream : TStream ist unnötig
und im Prinzip auch "falsch", da du den Stream, also .Position kurzzeitig veränderst.
öh, das const schützt doch nur davor, dass die übergebene Referenz nicht verändert wird. Die Properties erben ja nicht den const Status, oder
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.399 Beiträge
 
Delphi 12 Athens
 
#3

AW: TMemFileStream - Ein Zwitter aus TMemoryStream und TFileStream

  Alt 1. Nov 2010, 19:19
[edit]
Wegen dem SetSize ... hab grad gesehn, daß THandleStream das doch schon drin hat.
Hatte was im Kopf, daß dieses noch fehlt, aber das war nur beim TStream so, wo nur ein paar Dummymethoden vorhanden sind, welche eine Exception auslösen, wenn nicht mindestens eine der beiden SetSize-Methoden überschrieben wurden.
[/edit]

Jupp, CONST schützt nur vorm Ändern der Instanzvariable, bzw. vom Anlegen einer Kopie seitens Delphi.

Bei Klasseninstanzen gibt es keinen Unterschied, wenn man CONST verwendet oder nicht,
darum schreiben es viele auch nicht mit hin.

Nja, Const in einer Deklaration impliziert eine Nichtveränderung des Wertes, aber du Änderst schon den Inhalt des Objektes ... darum auch nur "Schönheitsfehler".


Mit und ohne CONST ist es formal korrekt (also im Bezug auf den Parameter), aber "logisch" kann man sich da gerne streiten.



Ich persönlich nutzt manchmal die Tatsache, daß hier mit und ohne CONST von Delphi gleich behandelt wird gerne mal aus.
> ohne CONST, quasi als implizites VAR, bei Veränderungen am Objekt
> mit CONST, wenn nix verändert wird
> und VAR, wenn die Instanzvariable verändert wird
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu ( 1. Nov 2010 um 19:26 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

AW: TMemFileStream - Ein Zwitter aus TMemoryStream und TFileStream

  Alt 1. Nov 2010, 20:31
Gibt es dafür ShareMode[ ( Mode and $F0 ) shr 4 ] keine Konstante? Und wenn nicht wäre es lesbarer, wenn man eine definieren würde, weil ich weiß aus dem Kopf nicht, was die Zeile macht.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.399 Beiträge
 
Delphi 12 Athens
 
#5

AW: TMemFileStream - Ein Zwitter aus TMemoryStream und TFileStream

  Alt 1. Nov 2010, 20:41
ShareMode ist die Konstande.
Der Mode-Parameter für TFileStream enthält kodiert 2 Werte.
> Zugriffsrechte wie GENERIC_READ und GENERIC_WRITE)
> Sharingrechte wie FILE_SHARE_READ und FILE_SHARE_WRITE

Das and/shr extrahiert nun den Anteil für die Sharingrechte (Mode and $F0).
Die Zugriffsrechte (Mode and $0F) werden hier nicht ausgewertet, da Eigene genommen werden.

Aber wenn man sich das richtig überlegt, dann braucht man dieses garnicht, da der Dateiname jedesmal dynamisch erstellt wird, wenn man einen TMemFileStream erstellt und es keinen sicheren Weg gibt, um an den Dateinamen eines TMemFileStream ranzukommen.

> Also entweder man speichert diesen Namen und bietet eventuell noch eine Möglichkeiten auch direkt auf einen bestehenden TMemFileStream, bzw. auf dessen Datei zuzugreifen (also einen weiteren TMemFileStream direkt auf eine bestehende Datei zu erstellen).

> Oder man verweigert lieber sämtliche Fremdzugriffe, indem man garkeine Sharingrechte angibt.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:51 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-2025 by Thomas Breitkreuz