Если вы работаете на языке, который его поддерживает, я бы предоставил метод Save, который принимает Stream. Таким образом, пользователь может сохранять данные там, где он или она хочет.
Запись занимает 20 секунд дольше, чем сохранение только в файл, но программисту легко это понять, и на вызывающем сайте очень ясно, что на самом деле происходит.
То, как вы это описали (объект, который читает входные данные и выводит их в другой файл), кажется странным. Какова цель построения объекта, который делает все во время строительства?
Вы бы назвали это так?
var stuff = DoStuff();
new SaveFileWeirdClass(stuff);
return;
Для любой разумной реализации SaveFileWeirdClass я бы не ожидал никаких побочных эффектов от его создания. Чтение файла - отлично. Создание файла? Нет.
Мне кажется, так понятнее:
var stuff = new StuffReader(); //Better name needed...
string filePath = this.whatever;
using(Stream stream = new FileStream(filePath))
stuff.Save(stream);