发新话题
打印

[学习] 一个C语言的小问题

一个C语言的小问题


这么晚了我还在写实验
遇到了个问题 XDJM们会的帮忙看一下
换了好几种方法
可就是实现不了返回主目录
举个例子:
我打开了[url=file:///E:/]file:///E:/[/url]操作系统/My Program/Myshell
但是我在这个目录下做了一些操作后想返回[url=file:///E:/]file:///E:/[/url]操作系统/My Program
可是回不去啊 原谅我鲁钝的大脑好了
感觉挺容易的 就是实现不了 大家表嘲笑熊猫哈
帮帮忙 三人行 必有我师
坛子这么多人 一定有高手哈
忘记说了 C语言 平台是VC++6.0
PS:C语言模拟一个小SHELL

TOP

晕了 都忘先说谢谢了

TOP

我不是来捣乱的,我是想坐板凳。。。
帮不了LZ....我根本不懂这个
终其一生在嫣红侄紫花丛中穿梭的蝴蝶,原属色盲。

TOP

恩?LZ把问题再详细说一下吧

进入目录是干什么?贴出相关代码一起探讨一下吧

TOP

回复 地板 shineの鱼宝 的帖子

整个程序是实现一个类似LINUX系统里shell的东西
不过以我目前鲁钝的大脑理解
也可以类似成“开始——附件——命令提示符”一样的东西
代码全部贴出来有点长
熊猫就贴个片段了:
if(access(name,04)==0)
/*name是保存文件名的数组,在我的问题里可以直接换为myshell。现在写的是框架,所以地址是硬连线地址*/
{
chdir(name);
system("cd");/*举例操作:显示一下当前路径E://操作系统/My Program/Myshell*/
}
然后怎么返回上级目录E://操作系统/My Program/呢?
不要推荐让我用堆栈操作啊。。。
进入目录不管进行什么操作,和返回操作应该是无关的。

TOP

哈,你这个问题我也不懂诶……

不过我刚才搜索了一下,DOS 下返回上级目录的命令是cd ..

貌似你可以用system("cd ..");来返回上级吧

TOP

不过这样做的貌似有点……程序看起来有点乱……

恩,我觉得如果E://操作系统/My Program这个是你的根目录的话,你可以写一个函数来回到根目录下的,好像用cd E://操作系统/My Program这样的操作来回到根目录,不知道行不行

TOP

话说回来,堆栈操作是什么?……这块我着实是苦手啊

TOP

回复 6楼 shineの鱼宝 的帖子

在VC++6.0的平台下 似乎是不支持system("cd ..");的
不行哦 一开始就试验过了。。
堆栈。。。。
你学过微机原理没?跟里面的思路差不多。

TOP

微机原理是学过啊

难道是要pop出地址,用汇编进行返回上级操作?那有点IMBA了……

我觉得很奇怪啊,既然可以CD进去,为什么不能CD出来呢?

TOP

HOHO,搞定……
在头文件里#include <direct.h>

这是我写的代码
system("chdir");
       
_chdir ("..");
system("chdir");

d:\我的文档\Visual Studio 2008\Projects\cmder\cmder
d:\我的文档\Visual Studio 2008\Projects\cmder

结果如上

TOP

Bingo~
虽然还有点小问题~不过好兴奋
鱼宝么一个~
好厉害的说~
但是不理解要这样~
鱼宝给个注释?

TOP

呃 改了一下 米问题了
_chdir ("..");
system("chdir");
因为我不要回显 所以说就这两个OK啦~呵呵
不过还是没明白过来_chdir ("..");这句

[ 本帖最后由 熊猫 于 2009-5-27 20:52 编辑 ]

TOP

回复 11楼 shineの鱼宝 的帖子

话说坛子的学习气氛好浓厚

TOP

又来了
完全解决~加搞懂~~么么鱼宝

TOP

回复 15楼 熊猫 的帖子

  嘿嘿嘿嘿。。。

TOP

恩,这个我也不知道具体为什么哈……

我就是MSDN正好给搜索出来的,既然有_chdir 那就应该还有其他的一系列的C指令吧,用C的指令来写命令提示符的话应该会比较OK吧

话说我也是误打误撞的啦,嘿嘿

其实这个是我老婆的号啊,是她看到这个问题然后问我会不会,会就帮助解决一下,HOHO,要谢就谢她吧

TOP

嘿嘿,既然你搞懂了就告诉我为什么用SYSTEM语句不行但是用_chdir可以吧

TOP

话说我没搞明白两者的区别,嘿嘿……

TOP

回复 18楼 shineの鱼宝 的帖子

我说的是我的理解 错了表打我好吧
首先_chdir()和chdir()的区别是里面有一个仅供microsoft windows系统调用 呃 具体记得不太清了 但是那个小“_”的确是用来做这个区分的。

第二 我最后敲定的程序是:
        chdir(name);//此行用于打开name文件(废话总是比较完美)
        system("cd");//此行用于显示当前路径
        chdir ("..");//此行用于返回上级目录,我没加“_”
编译运行的结果是能达到要求。

二者的区别,通过我这几周的实践,感觉是因为:
    第一,在VC++的环境下,很多DOS命令是没有被集成进去的,即:用system()函数调用后无法达到预想要求,但是编译不会报错,原谅我不记得范例了;第二,我觉得用system()函数的时候还有一个问题,就是传参麻烦或者根本不能传参?网上给的例子很多,我一个一个都试验了,但都无法传参。在我们讨论的问题中system("cd ..")中的“..”也其实是可以理解为参数(标记上级目录)的。
  chdir(“..”)函数可以回到上级目录,我是这么理解的:
在dos命令行下:cd <directory>有打开指定目录的作用
而在上文中我说过system函数是不能有参数的,所以就需要另外的打开目录文件,即:函数chdir()来打开参数为“..”的目录,然后就回到上级了。
呵呵,不知道你看懂了没,因为表述的很乱啊。不过我觉得这样是解释的通的。

TOP

鱼宝帮忙看下对不啊
好像是鱼宝你老公。。。
不过都一样啊 你们一家人嘛

TOP

你要问我对不对我也不知道诶……嘿嘿

不过看来用system语句确实是不能传递参数的说……所以之前一直不能用……

至于_chdir和chdir两者区别嘛……嘿嘿,反正条条大道通罗马啊……还是不要费神去想了,HOHO,难得糊涂呀

TOP

好强大,

TOP

发新话题