我正在开发一个程序,该程序接收Wavefront.obj文件,并最终将其放入OpenGL中并显示对象。
现在我只是想读取一个简单的cube.obj文件并打印其中的内容。其内容为:
v-1.0-1.0-2.0版本1.0-1.0-2.0版本1.0 1.0-2.0v-1.0 1.0-2.0v-1.0-1.0-4.0版本1.0-1.0-4.0版本1.0 1.0-4.0v-1.0 1.0-4.0f 1 2 3f 3 4 1f 6 5 7f 5 8 7f 2 6 3f 7 3 6f 1 4 5f 4 8 5f 4 7 8f 4 3 7f 5 6 1f 6 2 1
我将cube.obj放在命令行args中,并检查它是否打开。
FILE *fp;
fp = fopen(argv[1], "r");
if(fp == NULL)
fprintf(stderr, "cat: can't open %sn", argv[1]);
else
printf("works");
cin.get();
它甚至还没有打开。有没有更好的方法打开.obj文件(以及最终打印其中的内容?)
您在这里没有提供足够的信息,但很明显,问题很可能是argv[1]
的内容。argv[1]
的指针指向什么?不要想当然,使用调试器并查看它。我敢打赌它不是你想的那样。
您也没有考虑这样一个事实,即您的程序可能没有用任何参数启动,这意味着argv[1]
正在读取缓冲区的末尾。不过这是切向的。
编辑:
根据您的评论,您需要提供文件到fopen
的完整路径。如果文件在您的运行目录中,它应该可以工作,但取决于您的环境(VS是其中之一),这可能不像听起来那么简单。
我在\project\debug目录中使用文件foo.txt
运行了一个测试,该目录与我的可执行文件相同。它无法打开具有相对路径的文件,但成功地打开了完整路径。
然而,如果我只是双击该目录中的可执行文件,它就工作了。显然,VS正在幕后做一些事情,改变工作目录。
要使用相对路径,请右键单击项目->属性->调试->工作目录。把它设置到你的输出文件夹中,你就可以了。
#include <stdlib.h>
#include <stdio.h>
#include <Windows.h>
int main() {
FILE *file;
if(!(file = fopen("foo.txt", "r"))) {
printf("no worky");
}
}