Bueno despues de toda la noche e descubierto que el error no estaba en este codigo la variables cadena y fuente las habia manipulado anteriormente desde un tipo (char*) y por lo visto despues tienes que volver a crear la variable porque sino da muchos errores. La solucion antes de pasarle la variables string a la funcion guardar le hay que hacer esto:
Saludos.
Código [Seleccionar]
fixed(char* cad = cadena)
nuevacadena = new string(cad);
Saludos.