Tal vez sólo tengo otro negro pero, esta línea me está dando un montón de problemas:

FILE *fp = fopen("data/world.data", "rb");

Esto funciona muy bien en Linux cuando se compila con GCC. Pero cuando voy a compilar con Visual Studio, se bloquea. fp es siempre NULL. Tanto el BIN y el ejecutable en el mismo directorio. Ahora, para hacer las cosas aún más loco, cuando ejecuto el EXE usando Wine en Linux… es… funciona…

Tengo absolutamente no es un dios, maldita idea de lo que está pasando aquí. Tal vez es algo increíblemente estúpido error de mi lado, pero no puedo conseguir esta cosa para que se ejecute en Windows :/

También, tengo otro programa que funciona bien, no los archivos de datos también están contenidas en un subdirectorio del directorio de datos con nombre.

EDITAR:

Para dejar claro que ni / NI `\ * hacer el trabajo.

EDIT 2:

OK me he dado por vencida en este, tal vez alguien se ha divertido tratando de averiguar, aquí el ZIP que contiene el archivo EXE, Depuración de Datos para VS, etc.:

https://dl.dropbox.com/u/2332843/Leaf.zip

EDIT 3:

Compilado con CodeBlocks y MinGW, funciona como un encanto. Supongo que tiene que ver algo con MSVC o la Configuración del Proyecto en VS.

  • pruebe a cambiar «datos/mundo.de datos» a «datos\\mundo.de datos»
  • Yo debería haber publicado como respuesta… -_-
  • Ethier: leer msdn.microsoft.com/en-us/library/77859s1t(v=VS.71).aspx
  • Por casualidad, no olvidó poner «Directorio de Trabajo» en el proyecto de configuración de propiedades? Visual studio crea *.exes en depuración/liberación de carpetas y pistas (al iniciar la aplicación desde visual studio) de los que hay por defecto. I. e. si los «datos» está en otra parte, tu exe no será capaz de localizar. Puedes establecer el «Directorio de Trabajo» a algo así como $(ProjectDir) o $(SolutionDir), que será conveniente.
  • lo que usted hace en su código: fopen("data/world.data"); funciona perfectamente y es más probable que no la razón de la caída, en mi humilde opinión.
  • Sí, parece ser un MSVC problema de alguna manera… CodeBlocks con MinGW se compila correctamente.
  • Acepto la corrección, gracias por el enlace.

InformationsquelleAutor Ivo Wetzel | 2010-07-18

7 Comentarios

  1. 6

    Suena como data no es un subdirectorio de su actual directorio cuando se ejecuta el programa. De manera predeterminada (x86 objetivos) VS construir y ejecutar el programa desde un DEBUG o RELEASE subdirectorio del directorio de base que hemos creado para el proyecto. Usted puede modificar el directorio que va a ser «actual» cuando se ejecuta aunque (por ejemplo, proyecto | propiedades | propiedades de configuración de depuración para VS 2008).

    Edit: Mientras que Windows requiere el uso de una barra invertida como un separador de directorio en la línea de comandos, una barra diagonal obras fina en el código — este es no la fuente de su problema.

    • He movido el programa a un par de lugares diferentes, junto con los datos de la carpeta, en mi Escritorio en el Dropbox donde me puede ejecutar tanto en windows y Linux, siempre se bloquea en el Triunfo, pero funciona bien bajo Wine.
    • has probado a utilizar una ruta de acceso absoluta a su directorio de datos, para asegurarse de que se encuentran, independientemente de la ubicación del ejecutable?
    • He probado casi todo por ahora, me mudé de todo el código que llama a la función que contiene la llamada a fopen, elimina la llamada a fopen etc. Es sólo la llamada a fopen("data/world.data", "rb"); que no, tengo otros que tengan éxito. Supongo que va a intentar compilarlo con Code::Blocks, Visual Studio es tan F***ING LENTO en mi netbook de todos modos. Y sí, yo lo he probado en otro equipo con Windows, ya.
  2. 2

    En windows tienes que escribir lo siguiente:

    FILE *fp = fopen("data\world.data", "rb");

    Esto es así porque la barra invertida es un carácter especial (por lo que una barra diagonal inversa en una cadena se escribe con \ y un presupuesto símbolo es \» y así con los otros caracteres especiales).

  3. 1

    Ya que este problema sólo ocurre en windows. Dudo de si el archivo es muy denominado «mundo.de datos». Como ustedes saben, la configuración predeterminada para windows oculta la extensión de archivo. Es el nombre verdadero del mundo.de datos.xxx?

  4. 0

    Incluir una línea para GetCurrentDirectory(), para ver si se ejecuta desde el directorio que usted esperaba.

    Cuando puedo desarrollar en C#/C++ en visual studio, normalmente me ejecutarlo desde la carpeta de depuración. Creo que no importa si la barra diagonal se utiliza en lugar de la barra invertida en .net.

  5. 0

    Me pasó a tener el mismo problema, y de repente me imaginé.

    Que debe ser su windows culpa.

    Digamos, FILE *fp = fopen("data/world.data", "rb"); en windows, si se puede ocultar las extensiones, entonces usted puede ver el archivo de datos/mundo.de datos, pero en realidad es quizás /data/world.dat.txt o algo.

    Así que por favor revise las extensiones.

    Espero que ayude!

    • Hay aquí una lección: siempre desactivar la ocultación de las extensiones. No sólo evitar este tipo de confusión, pero cuando se recibe un correo electrónico que contiene un hola.dat que es realmente hello.dat.exe que no querer abrirlo 🙂
    • Dadas las otras pistas en las preguntas y comentarios, este no es el problema de este tiempo. Estás en lo correcto, sin embargo, que MS extensiones ocultas las causas de la pena y vale la pena comprobar.
  6. 0

    Me encontré con este de hoy, y sucedió porque he utilizado «br» en lugar de «rb» en la que el modo de argumento.

    Subyacente fopen es lanzar una excepción de algún tipo, que sólo se registra como un accidente. Es que no molesta a devolver el estándar de la NULA respuesta o conjunto de los asociados a los valores de error.

  7. -1

    No estoy seguro, pero puede ser porque estás usando la barra en lugar de (fugitivo) barra diagonal inversa en el camino?

    • El otro programa también usese /, y ya he probado con \\ , no se diferencia sólo otro accidente :/
    • Usted puede utilizar barras en lugar de barras diagonales en win2000 y winxp con ningún problema. Pueden causar problemas en win98 y abajo. No se si es característica documentada o si es compatible oficialmente con vista o superior.
    • las versiones de Windows han aceptado las barras de bien-y MS-DOS de vuelta a las primeras versiones que admiten en todos los subdirectorios (2.x) hizo así. Un (muy) pocos primeras versiones de MS-DOS, incluso le permitió establecer aceptar » / » y » – » en lugar de ‘\’ y ‘/’, respectivamente (es decir, seguir las convenciones de UNIX) en la línea de comandos.
    • Ataúd: yo dije «puede», lo que significa que no estoy seguro. Y me dijo que sólo porque la gente una vez que informó que el programa (que ha sido el uso de barras diagonales) se negaron a trabajar correctamente en win98. Como no podía programa de depuración en el equipo, no sé si separadores de rutas estaban causando el problema. También, si estás seguro de que es compatible comportamiento, sería agradable si usted dio a algunos el enlace de msdn donde este comportamiento está documentado oficialmente. Esto fácilmente podría terminar todos los argumentos.
    • Yo no estaba tratando de decir que se equivocaron en absoluto, sólo que eran aún más a la derecha que te habrás dado cuenta. @akira ya ha dado una MSDN enlace en un comentario en la pregunta original. Dudo que en esta última fecha vamos a encontrar una gran cantidad de MSDN sobre algo tan viejo como el Windows 98, 95, 2.11, MS-DOS 3.3, etc.

Dejar respuesta

Please enter your comment!
Please enter your name here