The problem is that you are trying to program C in C++. Use std::string instead, then you won't have stupid problems like this.
And you should call strlcat with the length of the size of the dest buffer, not the with length of src+dest. So you should pass 256 there.
Clarification: the problem is not that you are using C instead of C++. The problem is that the 3rd parameter to strlcat is the total length of your buffer.
This parameter prevents strlcat from writing over adjoining memory by overflowing your variable's bounds. It thinks your buffer is too small to combine both, so it doesn't do anything to the original. Hence, nothing changed.
So changing from int ret = strlcat(parent, file, file_len);
to return strlcat(parent, file, 256);
will fix your problem.