Si está trabajando en un idioma que lo admite, le proporcionaría un método Save que toma un Stream. De esa manera, el usuario puede guardar los datos donde quiera.
Se tarda 20 segundos más en escribir que guardar solo en un archivo, pero un programador lo comprende fácilmente, y en el sitio de llamada queda muy claro lo que realmente sucede.
La forma en que lo describió (un objeto que lee entradas y salidas a otro archivo) parece extraño. ¿Cuál es el propósito de construir un objeto que hace todo durante la construcción?
¿Lo llamarías así?
var stuff = DoStuff();
new SaveFileWeirdClass(stuff);
return;
Para cualquier implementación razonable de SaveFileWeirdClass, no esperaría ningún efecto secundario con solo crearlo. Leyendo un archivo - bien. ¿Crear un archivo? No.
A mí me parece más claro de esta manera:
var stuff = new StuffReader(); //Better name needed...
string filePath = this.whatever;
using(Stream stream = new FileStream(filePath))
stuff.Save(stream);