Incluir files en una aplicación usando XNA

Estoy haciendo un juego y necesito cargar algunos files de text para crear niveles. Después de mucha frustración al tratar de hacer que funcionaran, coloqué los files en la carpeta de debugging de mi proyecto (creo que esta es una mala idea, pero realmente no sabía cómo hacer que StreamReader funcionara).

El problema es que esto significa que no puedo ejecutar el proyecto cuando lo publico porque no sé qué hacer con los files de text. ¿Dónde me he equivocado y qué puedo hacer al respecto?

No puedo verificar esto ahora (no tengo instalado XNA), pero estoy bastante seguro de que lo siguiente debería funcionar:

  • Agregue el file de text a su proyecto.
  • Abra las properties del file (dentro de VS) y establezca los siguientes valores:
    • Crear acción: Content
    • Copiar al directory de salida: Copy if newer (o Copy always )

A continuación, abra las properties del proyecto, select la pestaña "Publicar" y click "Archivos de la aplicación …". En la nueva window, debería ver su file de text en la list y podrá cambiar su grupo o estado (el pnetworkingeterminado debe estar bien).

StreamReader busca el file en la carpeta actual (si acaba de iniciar su aplicación será la carpeta de su ".exe") y en todas las carpetas $path$ (por ejemplo, en la carpeta de Windows). Si abre una window de CMD e ingresa echo %path% , verá todas las routes válidas.

Para acceder a su file en time de ejecución, debe seguir los siguientes pasos:

1) Obtener la ruta de la aplicación

 System.Sting path = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location) 

2) Agregue "\" al final

 if (String.Compare(path.substr(path.lengh-1, 1), "\\") != 0) { path = path + "\\"; } 

3) Abrir el file relativo a la ruta:

 FileStream fileStream = new FileStream(path + "data\\level.txt", FileMode.Open); 

Si su estructura de carpetas tiene este aspecto:

 \bin\game.exe <- your program \data\level.txt \data\leve2.txt \data\leve3.txt 

Luego debes upload un nivel de carpeta, así que usa "…"

 FileStream fileStream = new FileStream(path + "..\\data\\level.txt", FileMode.Open);