Delphi.NET: zapis pliku do strumienia

0

Witam,
piszę aplikację która przesyła przez sieć między innymi pliki i mam z tym pewien problem/pytanie. Czy da się (a jeżeli tak to jak) "załadować" plik bezpośrednio do strumienia ? czy muszę go kolejno odczytywać do bufora i dane z bufora wpisywać do strumienia? podejrzewam że jednak jest jakiś prostszy sposób aby to zrobić...

0

Masz do dyspozycji takie klasy jak TStream, TFileStream czy TMemoryStream; Pierwsza klasa potrafi odczytywać dane z bufora i do niego zapisywać, druga odczytuje z pliku i do niego zapisuje, a ostatnia potrafi różne rzeczy, między innymi posiada metodę LoadFromStream oraz LoadFromFile - ta druga bardziej się przyda;

Klasy opisane powyżej istnieją w Borland Delphi 7, tak że na pewno w .NET ich nie zabrakło;

0

wiem że można do TMemoryStream tak załadować plik tylko nie potrafię go potem "przekopiować" do strumienia którym przesyłam dane - (System.IO.Stream).

ehhhh może pokażę procedurkę w której jest dzura taka jak w mojej głowie teraz ;(

procedure TRamkaPlik.ZapiszDane(aStr: Stream);
var
  xmlwr: XmlWriter;
begin
  inherited;
  xmlwr := XmlTextWriter.Create(aStr, System.Text.Encoding.UTF8);
  xmlwr.WriteStartElement('plik');
    // WIELKA CZARNA DZIURA
  xmlwr.WriteEndElement;//plik
end;

Gdyby klasa Stream miała procedurę LoadFromFile to nie było by problemu... może po prostu mam już dość na dzisiaj...

0
tom_85 napisał(a)

Gdyby klasa Stream miała procedurę LoadFromFile to nie było by problemu...

Nie ma co kombinować, lepiej napisać własną w oparciu o pliki amorficzne i procedury BlockRead i BlockWrite; Wiele wolniej to nie będzie działać a przynajmniej będziesz wiedział jak działa; Kod takiej procedury nie będzie zajmował więcej jak 50 linii więc śmiało można taki napisać własnoręcznie;

Zawsze możesz utworzyć strumień pomocniczy (np. z klasy TMemoryStream), do którego wczytasz dane z pliku a następnie wykonasz kopiowanie do właściwego strumienia; Według mnie nie ma sensu tak kombinować - lepiej mieć jeden strumień i napisać ręcznie wczytywanie pliku od razu do niego;

0

Tok rozumowania @furious programming: "po co skorzystać z dostępnych API, których nie znam, skoro mogę wszystko napisać sam od zera".

@tom_85: Klasa Stream nie ma metody LoadFromFile, bo sam strumień jest niezależny od typu swojego źródła. Nie musi go znać, więc się nim nie przejmuje. Chcesz utworzyć strumień z pliku? To użyj klasy File.
http://msdn.microsoft.com/en-us/library/system.io.file.openread

1 użytkowników online, w tym zalogowanych: 0, gości: 1