www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Write binary data as a file

reply Alexander Zhirov <azhirov1991 gmail.com> writes:
I'm trying to write a mechanism for writing and reading from 
Postgres.
Using the Adama D. Ruppe library. I write data to Postgres in the 
form of this code:
```d
ubyte[] bytes = cast(ubyte[])read("myFile");
PostgresResult resultQuery = cast(PostgresResult) 
db.query("insert into amts.t_client_xrdp_settings (pid_client, 
settings_file) values (?, ?)", id, bytes);
assert(resultQuery !is null);
```
Data appears in the database. Now I'm trying to do the reverse 
process. Get data from Postgres and create a file:
```d
auto result = db.query("select tcxs.settings_file as dbfile from 
amts.t_client_xrdp_settings tcxs where tcxs.pid_client = ?", id);
ubyte[] bytes = cast(ubyte[])result.front()["dbfile"];
write("newFile", bytes);
```
As a result, I get only a set of text data.
I am sure that my mechanism lacks refinement. It remains only to 
find out which one.
Aug 02 2022
next sibling parent "H. S. Teoh" <hsteoh qfbox.info> writes:
On Tue, Aug 02, 2022 at 11:10:27AM +0000, Alexander Zhirov via
Digitalmars-d-learn wrote:
[...]
 ```d
 auto result = db.query("select tcxs.settings_file as dbfile from
 amts.t_client_xrdp_settings tcxs where tcxs.pid_client = ?", id);
 ubyte[] bytes = cast(ubyte[])result.front()["dbfile"];
 write("newFile", bytes);
 ```
Don't use `write` for binary data. Use instead File.rawWrite: ubyte[] data = ...; File f = File("dbfile", "w"); f.rawWrite(data[]); T -- This is a tpyo.
Aug 02 2022
prev sibling parent reply Adam D Ruppe <destructionator gmail.com> writes:
On Tuesday, 2 August 2022 at 11:10:27 UTC, Alexander Zhirov wrote:
 As a result, I get only a set of text data.
my database layer is doing to!string(that_ubyte) which is wrong. gonna see about pushing a fix
Aug 02 2022
parent Alexander Zhirov <azhirov1991 gmail.com> writes:
On Tuesday, 2 August 2022 at 15:30:13 UTC, Adam D Ruppe wrote:
 On Tuesday, 2 August 2022 at 11:10:27 UTC, Alexander Zhirov 
 wrote:
 As a result, I get only a set of text data.
my database layer is doing to!string(that_ubyte) which is wrong. gonna see about pushing a fix
It's decided! After the fix, everything works! Thank you very much!
Aug 02 2022