aardio吧 关注:638贴子:765
  • 12回复贴,共1

关于fsys使用遇到的问题

只看楼主收藏回复

我在学习使用fsys的拷贝文件功能,测试我的电脑很奇怪,直接用拷贝函数,没反应,源文件夹和目标文件夹都是事先建好的。代码如下:
import fsys;
var root = "C:\Users\Administrator\Desktop\临时文件";
fsys.copy(root,"E:\test");
用如下代码,遍历文件夹,就可以拷贝成功。
import fsys;
var root = "C:\Users\Administrator\Desktop\临时文件";
fsys.enum( root,,
function(dirname,filename,fullpath,findData){
var path = fsys.path.relative(fullpath,root,false);
if(filename){
fsys.copy(fullpath,"E:\test");
}
else {
fsys.copy(fullpath,"E:\test");
}
},true
);
我的电脑是win10的,aadio升级到最新版的。
在一台电脑测试,fsys.delete可以,copy、move、rename都不行。另一台电脑测试,delete也不行。
后来看范例,用enum遍历一下,再用回调函数处理就可以。
另外测试fsys.isDir()函数,都拿正常的目录测试,有的测试通过;有的通不过。


IP属地:广东1楼2022-09-04 18:42回复
    我试了类似的如下代码,没问题的。
    var root = "C:\Users\Administrator\Desktop\临时文件";
    fsys.copy(root,"D:\test");


    IP属地:辽宁2楼2022-09-05 18:36
    收起回复
      你说的 fsys.copy() 这些是很基础的函数,几乎被每一个程序大量使用,
      一般不会因为操作系统不同就出问题。
      注意检查这些函数的返回值,成功会返回 true。
      你可以将这些函数的 FOF选项参数指定为 0,就会显示文件操作界面。如果执行失败你可以看到明确的错误信息。
      如果没有看到错误信息,检查一下是否忽略了其他细节。
      例如 fsys.copy() 在目标目录创建或未创建的时候行为是不一样的(文档有说明),
      是否复制的文件太多,没有注意到复制到子目录去了?!


      IP属地:浙江3楼2022-09-07 02:10
      回复
        谢谢Jacen指导,并提供了错误信息功能。我在win10,确实遇到了fsys.copy功能不稳定的情况,偶尔正常,大多数情况不正常。测试代码和结果如下:
        import console;
        import fsys;
        var rel = fsys.isDir("E:\test1");
        if(!rel){
        console.print("E:\test1不是目录")
        }
        rel = fsys.isDir("E:\test");
        if(!rel){
        console.print("E:\test不是目录")
        }
        fsys.enum( "E:\test1", "*.*",
        function(dirname,filename,fullpath,findData){
        if(filename){
        io.print("发现文件:"+filename,"完整路径:"+fullpath)
        rel = fsys.copy(fullpath,"E:\test");
        if(rel){
        io.print(fullpath,"拷贝成功!")
        }
        }
        else{
        io.print( "发现目录:" + dirname )
        rel = fsys.copy(fullpath,"E:\test");
        if(rel){
        io.print(fullpath,"拷贝成功!")
        }
        }
        }
        ,false
        );
        var rel = fsys.copy("E:\test1","E:\test",0);
        if(!rel){
        console.print(lasterr(fsys.opError));
        }
        console.pause(true);

        错误代码124,查询微软帮助文档,说路径非法:

        这跟我之前用fsys.isDir()测试一些目录,有时通过,有时不通过情况一样。
        小结现在测试的一些情况:
        1、win10测试经常有问题;win11没发生问题。
        2、win10,用enum一下,就没问题;单独用copy就有问题。


        IP属地:广东4楼2022-09-07 10:32
        回复
          实际上这个函数并不是 aardio 提供的函数,而是操作系统提供的函数。
          跟你手动复制文件没有区别。
          另外这些函数被 aardio 以及所有 aardio 编写的程序大量使用。
          例如你用 aardio 安装任何一个扩展库、发布程序都会频繁地调用这些函数。
          多年以来没有用户反馈该函数「大多数 Win10 系统经常出问题」。
          这边按你说的测试都是正常的,楼上朋友也帮你测试了也是正常的。
          ====================================
          从你提供的错误信息来看,
          124 是指你输入的文件路径是错误的,是不存在的路径。
          看起来不是 fsys.copy() 的锅。
          建议你仔细核对一下,这个文件路径是否真实存在。
          ====================================
          以上提供的信息仅供参考。
          因为无法在任何一个 Win10 系统上重现您的问题,暂无法提供更多帮助。


          IP属地:浙江5楼2022-09-07 16:20
          回复
            另外。
            你说你用 fsys.isDir() 也会有时通过有时不通过 —— 这边用多台 Win10 电脑做了大量测试,全部都准确通过,没有出现问题。
            如果你遇到问题 —— 请提供可以重现问题的代码。


            IP属地:浙江6楼2022-09-07 16:31
            回复
              我知道这是基本函数,不应该有啥问题,所以我也觉得奇怪。
              但是我在4楼的测试代码(完整代码)和截图,已经是矛盾的结果了。测试代码连续执行3个步骤:
              1、第一步:先用fsys.isDir()函数测试,"E:\test1"和"E:\test"两个目录,结果反馈不是目录。
              2、第二步:用enum函数遍历"E:\test1",把"E:\test1"的东西都拷贝到"E:\test",结果反馈拷贝成功。这个结果应该可以说明上面2个目录没问题。
              3、第三步:单独用fsys.copy()函数,把"E:\test1"拷贝到"E:\test",结果又报出错。
              我也不知道,为何我这里会这样


              IP属地:广东7楼2022-09-08 09:04
              回复
                人工创建目录,别人无法帮我检查。我用代码自己创建目录,结果还是有问题。完整代码如下:
                import console;
                import fsys;
                var test1 = "E:\test1";
                var test2 = "E:\test2";
                console.print("开始测试test1:")
                var ss1 = fsys.createDir(test1,true)
                console.print(type(ss1));
                console.print(ss1);
                if(ss1 == test1){
                console.print("test1创建路径与输入参数相同");
                }else {
                console.print("test1创建路径与输入参数不一样");
                }
                console.print();
                console.print("开始测试test2:")
                var ss2 = fsys.createDir(test2,true)
                console.print(type(ss2));
                console.print(ss2);
                if(ss2 == test2){
                console.print("test2创建路径与输入参数相同");
                }else {
                console.print("test2创建路径与输入参数不一样");
                }
                console.pause(true);
                结果如下图:

                test2创建是null?


                IP属地:广东8楼2022-09-08 10:01
                收起回复
                  应该是这个问题导致的。
                  \u202a 神奇的控制字符_小盼你最萌哒的博客-CSDN博客_\u202a
                  在网页搜索:u+202a
                  贴吧好像不能粘贴网址。


                  IP属地:广东11楼2022-09-17 20:21
                  回复
                    不可见的字符不止这一个。
                    之前检查过你的路径中并没有不可见字符( 刚才试了一下应该是发表以后自动去掉了) 。
                    之前有人问过这问题,他的原话是:
                    “这个文件路径 ****** 看起来没问题,实际却报错是不存在的路径”。
                    那么我第一时间就回复他用 string.hex() 看一下有没有包含不可见字符( 或者用工具里的 16 进制编辑器看一下 )
                    但是你说的是同一路径 fsys.copy 不正常,fsys.enum 就正常。然后又说有的系统正常,有的系统不正常,Win11 正常什么的。路径包含不可见字符不会是这这样,这种路径用 fsys.enum 一样会报错,在 Win11 上一样会报错,很容易分辨
                    10 天前就建议你“检查一下路径是否存在”了。
                    另外你不知道按 Shift 然后按右键可以复制文件路径?


                    IP属地:浙江16楼2022-09-18 01:14
                    回复