Прямо сейчас я создаю файл Parquet в памяти с помощью библиотеки и загружаю его в Azure Blob storage
. Однако на этот раз я хочу что-то попроще, а именно просто текстовый файл, чтобы записать DateTime.UtcNow
в текстовый файл в памяти и загрузить его в Azure.
Мой код до сих пор:
BlobServiceClient BlobServiceClient = new BlobServiceClient("my_code");
var containerClient = BlobServiceClient.GetBlobContainerClient("my_container");
var blobClient = containerClient.GetBlockBlobClient($"path/to/specific/directory/file.parquet");
using (var outStream = await blobClient.OpenWriteAsync(true).ConfigureAwait(false))
using (ChoParquetWriter parser = new ChoParquetWriter(outStream))
{
parser.Write(data_list);
}
Как мне создать текстовый файл в памяти без ChoParquetWriter
, который является частью библиотеки, которую я использую?
Обновление: нашел решение
using (var outStream = await blobClient4.OpenWriteAsync(true).ConfigureAwait(false))
{
byte[] bytes = null;
using (var ms = new MemoryStream())
{
TextWriter tw = new StreamWriter(ms);
tw.Write(RequestTime.ToString());
tw.Flush();
ms.Position = 0;
bytes = ms.ToArray();
ms.WriteTo(outStream);
}
}
есть более простой способ? если нет это нормально
Что это за волшебство RequestTime
?
Я могу упрощать, но не может ли текстовый редактор, который вы создаете, просто напрямую писать в outStream? Просто убедитесь, что текстовый редактор также заключен в оператор using, чтобы он правильно очищался...
Это немного проще, если напрямую использовать метод UploadAsync
или Upload
.
Например:
//other code
var blobClient4 = containerClient.GetBlockBlobClient("xxx");
using (var ms = new MemoryStream())
{
StreamWriter writer = new StreamWriter(ms);
writer.Write(RequestTime.ToString());
writer.Flush();
ms.Position = 0;
await blobClient4.UploadAsync(ms);
}
Попробуйте
System.IO.TextWriter