If we can't agree on this then I'll just back down since no one has complained about the current design until now :wink:.

The reason I did this is that I don't believe a constructor has any business performing I/O internally. All it should do is create a valid initial state for the object. If we were passing in some kind of dependency as a provider interface then the implementation passed in would be at liberty to do whatever it likes but that is OK, since the caller of the constructor is responsible for the argument and any consequences that has, but I don't believe a constructor should ever encapsulate I/O operations itself.