【问题标题】:How to change directory using a c program and display its directory [duplicate]如何使用c程序更改目录并显示其目录[重复]
【发布时间】:2015-02-22 15:25:08
【问题描述】:

我尝试过使用 chdir 和 cd 但运行了 dir 但两者都显示了我所在的文件夹/项目文件夹的目录。 以下是源代码

system("chdir (C:/)");
system("dir");

还有这个

system("chdir C:/");
system("dir");

还有这个

system("cd C:/");
system("dir");

【问题讨论】:

  • 这不是很明显吗? -> chdir (C:/)? system("dir")???
  • 我只是想说 iharob :)
  • 我认为您无法更改 shell 的工作目录,因此您需要一种不同的方法,我没有坚实的基础可以这么说,但我几乎可以肯定。
  • 试试system("chdir (C:/) && dir");
  • 如果只是获取DOS上的目录列表,则不需要cd,只需system("dir path-to-directory")即可。

标签: c directory


【解决方案1】:

AFAIK,通过调用system() 函数调用,它将通过调用/bin/sh -c 执行command 并返回退出状态。对system() 的下一次调用将调用另一个/bin/sh -c

因此,基本上,对于每个调用,都会使用一个新的 child shell。因此,您不能期望在第二次调用中保留第一次调用的结果 [persistent]。您当前的进程目录不会受到影响。下次调用system() 将考虑当前进程目录本身。

您可以尝试通过&&; 将它们加入到system() 的单个调用中来提供要执行的两个命令

【讨论】:

    【解决方案2】:

    我认为你不应该使用system(),因为它会让你的程序变得不可移植。 (例如,Linux 上不存在 dir)

    您可以使用opendirreaddir 打开目录并列出其中包含的文件。

    这是一个简单的例子:

    DIR *dp;
    struct dirent *dptr;
    if(NULL == (dp = opendir("C:")) )
    {
        perror("Opendir");
        exit(EXIT_FAILURE);
    }
    else
    {
        while(NULL != (dptr = readdir(dp)) )
        {
            printf("%s ",dptr->d_name);
        }
        closedir(dp);
    }
    

    【讨论】:

    • 这将如何改变程序的当前工作目录?
    • 它没有,那只是一种不同的方法,因为他不需要更改目录。这是做同样事情的另一种方法:显示目录的内容。
    【解决方案3】:

    通过调用 system() 您正在创建一个将更改目录但不会更改当前进程工作目录的子进程。

    尝试按照这篇文章的建议调用函数 chdir:Change the current working directory in C++

    【讨论】:

      【解决方案4】:

      您可以使用 Posix chdir 函数来更改目录,然后使用 Posix opendirreaddirclosedir 方法来枚举目录的内容。

      这两个问题之前都在 SO 中讨论过。请参考:

      Change current working directory C

      How do you get a directory listing in C?

      【讨论】:

        猜你喜欢
        • 2018-02-21
        • 2010-12-22
        • 2019-06-17
        • 1970-01-01
        • 2014-07-26
        • 1970-01-01
        • 2016-07-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多