feynmand 发表于 2011-5-11 15:29:50

欢迎讨论,程序自动生成函数,但该函数不能被后续程序调用的问题

本帖最后由 feynmand 于 2011-5-12 08:32 编辑

clear
commandline={'function dataout=mytest(a,b)'
    'dataout=a+b;'};

fid = fopen('mytest.m', 'w');
fprintf(fid, '%s\n',commandline{1:2});
fclose(fid);

mytest(2,3)以上的一段程序,放在m文件中直接运行会报错,说mytest文件不存在。但是如果在mytest(2,3)这里加个断点,在调试过程中运行,那么就不会报错,会得到正确的结果。为什么会这样呢?

feynmand 发表于 2011-5-11 15:55:01

和qibbxxt讨论了一下,发现在mytest(2,3)前面加上open(mytest)或者which mytest.m,然后再运行就没有问题了,还有其他方法吗?另外有谁知道这是什么原理么

messenger 发表于 2011-5-11 17:10:38

这段代码在我这里运行正常。所以怀疑是操作系统的问题,如果你的操作系统是Vista或Win7,而你默认的Matlab的工作目录在C:\Program Files\下面,会出现这个问题。

因为上述操作系统,往C:\Program Files\下面写入是需要管理员权限的。当要写入mytest.m时,触发了UAC,实际保存的文件被重定向到C:\Users \用户名AppData\Local\VirtualStore中对应的目录中,而Matlab却认为成功的保存到了Matlab的工作目录中。所以当你再以默认目录调用时,就会出错。

所以,你可以试试关掉操作系统的UAC,或者指定文件保存目录,别把文件保存在系统目录下。

feynmand 发表于 2011-5-11 19:28:32

.

本帖最后由 feynmand 于 2011-5-12 08:31 编辑

我用的是xp系统,matlab工作目录在D:\Program Files\下,没有你说的这个问题。
在命令行运行这些命令是没有问题的,你新建一个m文件,放到文件里面就会发现程序会出错的。

ljelly 发表于 2011-5-12 09:01:00

我用的是xp系统,matlab 2010b版本安装在E:\Matlab下,工作目录是我自己定义的
在命令行运行这些命令没有问题,新建一个m文件,放到文件里面,程序运行也没有出错

不能复现你说的现象,可能与messenger说的有点关联

ljelly 发表于 2011-5-12 09:08:44

本帖最后由 ljelly 于 2011-5-12 09:11 编辑

我用的是xp系统,matlab工作目录在D:\Program Files\下,没有你说的这个问题。
在命令行运行这些命令是没有问题的,你新建一个m文件,放到文件里面就会发现程序会出错的。
feynmand 发表于 2011-5-11 19:28 http://forum.simwe.com/images/common/back.gif
除此之外,你的安装路径和其它信息有何不同?
试着改变软件工作环境设置,如重启matlab, 重启电脑,工作目录下有没有汉字文件夹等
再复现一下是否会现同样的问题
应该不是matlab软件的问题

qibbxxt 发表于 2011-5-12 09:21:18

可以用rehash命令来刷新一下

rocwoods 发表于 2011-5-12 10:05:35

我和feynmand还有qibbxxt的一致,各位保存到m文件运行的时候,每次运行前都把mytest文件删掉了吗?

feynmand 发表于 2011-5-12 10:07:48


除此之外,你的安装路径和其它信息有何不同?
试着改变软件工作环境设置,如重启matlab, 重启电脑,工作目录下有没有汉字文件夹等
再复现一下是否会现同样的问题
应该不是matlab软件的问题
ljelly 发表于 2011-5-12 09:08 http://forum.simwe.com/images/common/back.gif

每次运行前得确认先把之前产生的文件删除掉

ljelly 发表于 2011-5-12 11:27:15

本帖最后由 ljelly 于 2011-5-12 11:42 编辑

9# feynmand

果然如此,看来是直接调用时,工作目录还没有来得及刷新,找不到这个函数文件
所以不能调用,刷新一下后就正常了

加断点或者加其他的与该文件相关的命令都可以,甚至用doc mytest只要给一个缓冲时间即可

我之前是先在命令窗中运行了一下,先生成mytest.m文件了,然后再存成文件运行的
此时文件已存在,所以没有出现问题,漏掉了,呵呵
页: [1]
查看完整版本: 欢迎讨论,程序自动生成函数,但该函数不能被后续程序调用的问题