Load entire file, as a char array.

Chris Katko ckatko at gmail.com
Mon Sep 3 07:38:51 UTC 2018


On Monday, 3 September 2018 at 06:28:38 UTC, bauss wrote:
> On Monday, 3 September 2018 at 06:25:23 UTC, bauss wrote:
>> On Monday, 3 September 2018 at 03:19:39 UTC, Neia Neutuladh 
>> wrote:
>>> On Monday, 3 September 2018 at 03:04:57 UTC, Chris Katko 
>>> wrote:
>>>> This should be simple? All I want to do is load an entire 
>>>> file, and access individual bytes. The entire thing. I don't 
>>>> want to have know the file size before hand, or "guess" and 
>>>> have a "maximum size" buffer.
>>>>
>>>> So far, all google searches for "dlang binary file read" end 
>>>> up not working for me.
>>>>
>>>> Thank you.
>>>
>>> http://dpldocs.info/experimental-docs/std.file.read.1.html
>>>
>>> import std.file : read;
>>> auto bytes = read("filename");
>>>
>>> This gives you a void[], which you can cast to ubyte[] or 
>>> char[] or whatever you need.
>>
>> Or he could do readText() which returns a string, which in 
>> turn will give a proper char array when casted.
>
> Actually ignore the casting thing, looking at readText it takes 
> a template parameter.
>
> So:
>
> char[] a = readText!(char[])("filename");

Thanks, that works!

But... I'm so confused by D's fifty different string types.

I can run .strip() on a char[]. But I can't run 
.replace('\n','?') ?

So then I convert char[] to a temporary string and run replace on 
that.

but then writefln("%s") doesn't accept strings! Only char[].

   char []t = cast(char[])(c[i-15 .. i+1]).strip();
   string s = text(t); //s.replace('\n','?')
   writefln(" - [%s]", s); // fail

main.d(89): Error: template std.array.replace cannot deduce 
function from argument types !()(char[], char, char), candidates 
are:
/usr/include/dmd/phobos/std/array.d(2122):        
std.array.replace(E, R1, R2)(E[] subject, R1 from, R2 to) if 
(isDynamicArray!(E[]) && isForwardRange!R1 && isForwardRange!R2 
&& (hasLength!R2 || isSomeString!R2))
/usr/include/dmd/phobos/std/array.d(2255):        
std.array.replace(T, Range)(T[] subject, size_t from, size_t to, 
Range stuff) if (isInputRange!Range && (is(ElementType!Range : T) 
|| isSomeString!(T[]) && is(ElementType!Range : dchar)))


What's going on here?


More information about the Digitalmars-d-learn mailing list