Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在C中使用stat()在不同的相对目录中查找文件的大小?_C_Macos - Fatal编程技术网

如何在C中使用stat()在不同的相对目录中查找文件的大小?

如何在C中使用stat()在不同的相对目录中查找文件的大小?,c,macos,C,Macos,下面是我使用stat()获取文件大小的函数: 我可以通过执行以下操作获得文件大小: size = fsize ("byte.bin"); 但是,当我需要从本地目录的较低目录(比如“deps/src”目录)获取文件时,它会在我身上提前停止,并且没有我预期的错误消息: size = fsize ("deps/src/byte.bin"); 我编写了一个使用该函数的小程序,将byte.bin文件复制到“deps/byte.bin”中,并用“deps/byte.bin”调用了我的fsize函数,得到

下面是我使用stat()获取文件大小的函数:

我可以通过执行以下操作获得文件大小:

size = fsize ("byte.bin");
但是,当我需要从本地目录的较低目录(比如“deps/src”目录)获取文件时,它会在我身上提前停止,并且没有我预期的错误消息:

size = fsize ("deps/src/byte.bin");
我编写了一个使用该函数的小程序,将byte.bin文件复制到“deps/byte.bin”中,并用“deps/byte.bin”调用了我的fsize函数,得到错误“无法确定byte.bin的大小:没有这样的文件或目录”

如果我使用像“/something/deps/byte.bin”这样的绝对路径,它就会工作


我做错了什么,以及我如何对相对路径执行此操作?

我猜发生的情况是您错误地假设了工作目录。测试工作目录所在位置的一种简单方法是编写一个程序,只输出一个文件,如
test.txt
。在许多(但不是所有)情况下,工作目录位于存储可执行文件的任何位置。这意味着,如果您试图访问相对路径上的文件,您可能需要在相对路径中至少包含一个
,才能退出
bin
目录。

我猜发生的情况是您错误地假设了工作目录。测试工作目录所在位置的一种简单方法是编写一个程序,只输出一个文件,如
test.txt
。在许多(但不是所有)情况下,工作目录位于存储可执行文件的任何位置。这意味着,如果您试图访问相对路径上的文件,您可能需要在相对路径中至少包含一个
,才能退出
bin
目录。

为什么会爆炸?您可能已经在那里找到了
strerror
,它说了什么?它没有像我想的那样打印错误消息。如果我显式地给它一个不存在的文件,就会打印错误消息。当我使用确实存在的“deps/src/byte.bin”时,它会在我的malloc\u error\u break中给我一个malloc错误。然而,如果我将同一个文件复制到本地目录并使用“byte.bin”,它会运行得很好。如果您遇到malloc错误,我敢说您在其他地方遇到了问题,这正好在这里体现出来;运行
strace-o/tmp/out-f./test deps/byte.bin
(或者您需要调用它的方式),查看
/tmp/out
中的系统调用及其返回值——一旦您找到失败的
stat
调用,我希望错误会像day一样清楚。啊哈,看起来像现代的等价物是:)它为什么会爆炸?您可能已经在那里找到了
strerror
,它说了什么?它没有像我想的那样打印错误消息。如果我显式地给它一个不存在的文件,就会打印错误消息。当我使用确实存在的“deps/src/byte.bin”时,它会在我的malloc\u error\u break中给我一个malloc错误。然而,如果我将同一个文件复制到本地目录并使用“byte.bin”,它会运行得很好。如果您遇到malloc错误,我敢说您在其他地方遇到了问题,这正好在这里体现出来;运行
strace-o/tmp/out-f./test deps/byte.bin
(或者您需要调用它的方式),查看
/tmp/out
中的系统调用及其返回值——一旦您找到失败的
stat
调用,我希望错误会像day一样清楚。啊哈,看起来像现代的等价物是:)谢谢你的回复。我同意。我希望我能找出dir stat()使用的是哪个。如果它只使用当前工作目录作为文件名,而使用不同的cwd作为路径/文件名,我发现这种行为很奇怪。我还从unistd.h运行了GetCurrentDir(),它正确地返回了我的cwd。“真奇怪!”埃维乌托夫,那么让我重申乔纳森·伍德的问题。
deps
是当前工作目录的子文件夹吗?如果不是,那么你所拥有的将不起作用,因为它是一个不正确的相对路径。我很确定我之前说过它是一个子目录,确实如此。谢谢你的回复。我同意。我希望我能找出dir stat()使用的是哪个。如果它只使用当前工作目录作为文件名,而使用不同的cwd作为路径/文件名,我发现这种行为很奇怪。我还从unistd.h运行了GetCurrentDir(),它正确地返回了我的cwd。“真奇怪!”埃维乌托夫,那么让我重申乔纳森·伍德的问题。
deps
是当前工作目录的子文件夹吗?如果不是,那么你所拥有的将不起作用,因为它是一个不正确的相对路径。
size = fsize ("deps/src/byte.bin");