Embed files into binary.

rikki cattermole via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Sun Jun 5 20:23:02 PDT 2016


On 06/06/2016 3:11 PM, Pie? wrote:
> On Monday, 6 June 2016 at 02:34:07 UTC, Adam D. Ruppe wrote:
>> On Monday, 6 June 2016 at 02:05:09 UTC, Pie? wrote:
>>> I believe the essentially converted the file into a ubyte or
>>> something and then wrote that out to a temp file and read in the temp
>>> file... this seems a bit of a kludge to me.
>>
>> They might do that for certain special cases, but
>> import("file.whatever") just drops the file content in memory and you
>> can then access it as an array.
>>
>>> Because D allows such an embedding feature, maybe the file system
>>> should allow working with this concept?
>>
>> Why do you need it through the file system? If you're writing the
>> code, just use the array in memory. If it is external, see if the
>> library offers something like that.
>>
>> DLL and exe are a special case, most things don't need to be physical
>> files.
>
> Because, as I said, if I'm working with pre-exiting modules that work
> with file, I have to provide a file or modify the source.
>
> e.g., how could I do this easily with your read in your png module? It
> takes a file..
>
> /// Easily reads a png file into a MemoryImage
> MemoryImage readPng(string filename) {
>     import std.file;
>     return imageFromPng(readPng(cast(ubyte[]) read(filename)));
>
> recognize the code?
>
> Of course, like I said, it can be modified in this case, but that means
> nothing in general.


ubyte[] theArray = import("...");
MemoryImage img = imageFromPng(readPng(theArray));

And that's just from the snippet you provided.
Yay overloads!


More information about the Digitalmars-d-learn mailing list