Nie jest problemem samo stworzenie, chodzi mi o dopisywanie do końca takiego Stringa. Nawet jeśli zaczniemy od deklaracji samej tablicy, to pierwsze przypisanie przydzieli jej odpowiedni rozmiar, a mi zależy na szybkim powiększaniu rozmiaru lub jakimś ciekawym alternatywnym rozwiązaniu.
Wiem, że mogę użyć klasy vector lub po prostu funkcji .NET-owej "resize" do zmiany rozmiaru tablicy i za każdym razem gdy chcę dodać nowe dane, sprawdzić czy się zmieszczą i w razie konieczności zmienić rozmiar. Nie wiem jednak jak do wydajności mają się takie operacje, bo mówimy o dużych tablicach (~10MB).
Jakieś propozycje ? Bo stanąłem w trakcie pisania funkcji i zacząłem się nad tym zastanawiać, czy zamiast trzykrotnie przepisywać dane (array<Byte> <-> String^) nie można tego od razu upchnąć w typie wyjściowym.
---
W sumie to teraz widzę, że problem jest trochę bardziej skomplikowany. Dane są zbierane w trakcie działania programu, jedne typu String^ inne, jak strumień pliku jako tablica Byte. Sam plik nawet nie powinien być zapisywany do typu String, a pozostać już w formacie wyjściowym. Prosta kwestia gdy są np.
1. String
2. tablica Byte
3. String
Wtedy można po prostu trzykrotnie zapisać do strumienia, ale jeśli będzie coś takiego
1. String
2. tablica Byte
3. String
4. tablica Byte
5. String
to nie zapiszę tego w jednym strumieniu i 2 Stringach (nie można zapisać części, poczekać na zebranie reszty danych i zapisach kolejnych), więc pozostaje tylko rozwiązanie w postaci tablicy Byte dla wszystkich danych.
----
No cóż, na razie doszedłem do czegoś takiego. Funkcja do zapisu String-a
KOD cpp: UKRYJ
Void Mail::MPF_Set_Field(String^ field, String^ value)
{
System::Text::ASCIIEncoding^ encoding = gcnew System::Text::ASCIIEncoding;
String^ record = this->MPF_boundary + "\r\n" + "Content-Disposition: form-data; name=\"" + field + "\"" + "\r\n\r\n" + value + "\r\n";
array<Byte> ^ data = encoding->GetBytes(record);
Array::Resize(this->MPF_body, this->MPF_body->Length + data->Length);
Array::Copy(data, this->MPF_body, data->Length);
}
{
System::Text::ASCIIEncoding^ encoding = gcnew System::Text::ASCIIEncoding;
String^ record = this->MPF_boundary + "\r\n" + "Content-Disposition: form-data; name=\"" + field + "\"" + "\r\n\r\n" + value + "\r\n";
array<Byte> ^ data = encoding->GetBytes(record);
Array::Resize(this->MPF_body, this->MPF_body->Length + data->Length);
Array::Copy(data, this->MPF_body, data->Length);
}
I dla pliku
KOD cpp: UKRYJ
Void Mail::MPF_Set_File(String^ name, String^ full_file_path)
{
System::Text::ASCIIEncoding^ encoding = gcnew System::Text::ASCIIEncoding;
String^ record = this->MPF_boundary + "\r\n" + "Content-Disposition: form-data; name=\""
+ name + "\"; filename=\"" + System::IO::Path::GetFileName(full_file_path) + "\""
+ "\r\n" + "Content-type: application/octet-stream" + "\r\n\r\n";
array<Byte> ^ data = encoding->GetBytes(record);
array<Byte> ^ file_stream = System::IO::File::ReadAllBytes(full_file_path);
Array::Resize(this->MPF_body, this->MPF_body->Length + data->Length + file_stream->Length + 2);
Array::Copy(data, this->MPF_body, data->Length);
Array::Copy(file_stream, this->MPF_body, file_stream->Length);
this->MPF_body[this->MPF_body->Length-2] = 13;
this->MPF_body[this->MPF_body->Length-1] = 10;
}
{
System::Text::ASCIIEncoding^ encoding = gcnew System::Text::ASCIIEncoding;
String^ record = this->MPF_boundary + "\r\n" + "Content-Disposition: form-data; name=\""
+ name + "\"; filename=\"" + System::IO::Path::GetFileName(full_file_path) + "\""
+ "\r\n" + "Content-type: application/octet-stream" + "\r\n\r\n";
array<Byte> ^ data = encoding->GetBytes(record);
array<Byte> ^ file_stream = System::IO::File::ReadAllBytes(full_file_path);
Array::Resize(this->MPF_body, this->MPF_body->Length + data->Length + file_stream->Length + 2);
Array::Copy(data, this->MPF_body, data->Length);
Array::Copy(file_stream, this->MPF_body, file_stream->Length);
this->MPF_body[this->MPF_body->Length-2] = 13;
this->MPF_body[this->MPF_body->Length-1] = 10;
}
gdzie,
this->MPF_body jest tablicą typu Byte. To tyle co udało mi się (na razie) samemu wykombinować w tej kwestii.






