Разница между fstream и stringstream при перенаправлении данных заключается в том, для работы с какими объектами они предназначены.
fstream — класс двунаправленных файловых потоков, который используется для потоковой передачи символьных данных в файлы и из них. 13 После открытия файловый поток fstream может выполнять как операции чтения, так и операции записи. 2
Stringstream — класс двунаправленного строкового потока, который используется для работы с объектами потока ввода-вывода для вставки и извлечения символьных данных. 13 Строковые потоки предназначены для чтения и записи данных в строки, которые играют здесь роль буфера для хранения информации. 2
Таким образом, fstream работает с файлами, а stringstream — со строками.