CAPL脚本中关于相对路径/绝对路径操作的几个傻傻分不清的内置函数

Posted 蚂蚁小兵

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CAPL脚本中关于相对路径/绝对路径操作的几个傻傻分不清的内置函数相关的知识,希望对你有一定的参考价值。

📙 相关文章


📘前言

  • 🍅 CAPL脚本中关于相对路径,绝对路径操作的几个傻傻分不清的内置函数
  • 🍅演示软硬件环境 Win10 x64 ; CANoe 11 SP2 x64

目录

📙 getAbsFilePath

  • .long getAbsFilePath(char relPath[], char absPath[], long absPathLen)
  • 根据下面help文档的解释,就是根据输入的相对路径,输出绝对路径。
  • 那么问题来了,输出的绝对路径 ,根目录是什么呢?
  • 如果输出的绝路路径,硬盘上不存在这个路径,会报错吗?

  • 🍅 1️⃣ 注意下面文件userFilesTest.txt文件的路径: D:\\CANoe-Demo\\TestModule\\FilePathFunc


  • 🍅 2️⃣ 我们执行下面的脚本,注意脚本文件名是:filePathFuncTest.canuserFilesTest.txt同级目录
on key 'e'
  

  char absPath[256];
  long retVal;
  retVal =  getAbsFilePath("userFilesTest.txt", absPath, 256);
  write ("absPath: %s ", absPath);
  write ("retVal: %d ", retVal);


  • 🍅 3️⃣ 输出结果显示函数返回值是31,这表明返回值绝对路径的字符串长度;另外范围值是D:\\CANoe-Demo\\userFilesTest.txt ,不是预期的D:\\CANoe-Demo\\TestModule\\FilePathFunc\\userFilesTest.txt
  • 重点来了:
    1:返回值的路径在本机上不存在,不会报错;
    2:组成绝对的根目录不是以这个脚本为参考根目录,而是以这个cfg文件所在文件夹为根目录


  • 🍅4️⃣ 所以我们想要获得准确的绝对路径名,就要以cfg所在文件为根目录,然后写对相对路径,如下图代码:
on key 'f'
  

  char absPath[256];
  long retVal;
  retVal =  getAbsFilePath("TestModule\\\\FilePathFunc\\\\userFilesTest.txt", absPath, 256);
  write ("absPath: %s ", absPath);
  write ("retVal: %d ", retVal);

📙 setFilePath

  • .void setFilePath (char Path[],dword mode);
  • 根据下面help文档的解释,就是在有对文件操作的时候要先设置要操作的文件路径
  • 那么问题来了,我读写文件的时候,这个函数一定需要吗?不写会怎么样?

  • 🍅 1️⃣ 看下下面文件的路径位置


  • 🍅 2️⃣ 我们就不加setFilePath 函数,直接操作这个test.ini文件会怎样呢?
on key 'g'  

  long retVal;
  //写入INI文件 函数
  retVal = writeProfileInt ("setting", "parameter_1", 8, "test.ini");
  write ("retVal: %d ", retVal);


  • 🍅 3️⃣ 输出结果显示函数返回值是1,这表明函数执行成功了,但是test.ini文件中什么信息都没有呢
  • 重点来了:
    1:返回值的路径在本机上不存在,不会报错;
    2:组成绝对路径的根目录不是以这个脚本为参考根目录,而是以这个cfg文件所在文件夹为根目录


  • 🍅 4️⃣ 在 打开的cfg的根目录下发现了test.ini文件,并且写入了值,这就说明,如果直接输入文件名,如果cfg所在文件下没有这个这个文件,那么会直接创建写入。

  • 🍅 5️⃣ OK,直接写文件名,找不到路径,那我填入绝对路径总可以了吧
on key 'h'
  

  long retVal;
  //写入INI文件 函数  
  // 直接写入绝对路径?
  retVal = writeProfileInt ("setting", "parameter_1", 8, "D:\\\\CANoe-Demo\\\\TestModule\\\\FilePathFunc\\\\test.ini");
  write ("retVal: %d ", retVal);


  • 🍅 6️⃣ 纳尼?返回值为0,这也不行;原来如果没有提前设置文件要操作的路径,必须是相对路径,绝对路径都不行。



  • 🍅 7️⃣ 这回我们设置成相对路径
on key 'j'
  

  long retVal;
  //写入INI文件 函数  
  // 如果没有提前设置文件操作路径,必须用相对路径
  retVal = writeProfileInt ("setting", "parameter_1", 8, "TestModule/FilePathFunc/test.ini");
  write ("retVal: %d ", retVal);


  • 🍅 8️⃣ 果然成功了,但是如果我要操作的文件不在D盘,也和cfg文件没有相对关系,那怎么弄?,好像还必须要要用 setFilePath或者 setWritePath.才行

  • 🍅 9️⃣ 真不服气,拿到真的没办法了吗?必须要妥协先设置setFilePath?看下图,还有一种方法,
    Configuration|Options|Extensions|User Files 把要操作的文件加进去,
    这里注意,不可以添加文件名相同的问价,即使路径不同

  • 再直接操作文件名
on key 'l' 

  long retVal;
  retVal = writeProfileInt ("setting", "parameter_1", 8, "test.ini");
  write ("retVal: %d ", retVal);


  • 🍅 🔟 测试结果如下图,也是能够成功的;

  • 🍅 1️⃣1️⃣ 经过了前面步骤的试错,为了代码的适用性,我们还是不要挣扎了 ,还是最好加上setFilePath函数
on key 'k' 

  long retVal;
  setFilePath("E:\\\\FilePathFunc", 1);
  retVal = writeProfileInt ("setting", "parameter_1", 8, "test.ini");
  write ("retVal: %d ", retVal);


  • 🍅 1️⃣2️⃣ 测试结果如下图;

📙 setWritePath

setWritePathsetFilePath 的功能子集

📙 getUserFilePath

  • .看下图help文档

  • 🍅 1️⃣ 这个函数和getAbsFilePath功能很像,但是又不同,比如比如下面的代码

  • getUserFilePath 首先在 user files 里面(上面截图中,添加进去的)寻找,找到了,就返回这个文件的绝对路径
    找不到就去打开的cfg文件所在的问价夹目录下去找

  • getAbsFilePath 直接去打开的cfg文件所在的问价夹目录下去找,找不到那就报错了。

on key 'z'
  

  char absPath[256];
  long retVal;
  retVal =  getUserFilePath("test.ini", absPath, 256);
  write ("getUserFilePath absPath: %s ", absPath);
  write ("getUserFilePath retVal: %d ", retVal);
  
  
  retVal =  getAbsFilePath("test.ini", absPath, 256);
  write ("getAbsFilePath absPath: %s ", absPath);
  write ("getAbsFilePath retVal: %d ", retVal);


  • 🍅 2️⃣ 看下输出结果,有空的可以把user file在 option中去掉再试试看看什么结果

📙 RegisterUserFile

  • .看下图help文档,就是以代码的方式在 CANoe运行期间也可以在 user Files中添加文件

  • 🍅 1️⃣ 直接看代码,执行看下结果
on key 'x'  

  char absPath[256];
  long retVal;
  retVal =  RegisterUserFile("E:\\\\FilePathFunc\\\\test2.ini",0);
  write ("getUserFilePath retVal: %d ", retVal);
  
  retVal =  getUserFilePath("test2.ini", absPath, 256);
  write ("getUserFilePath absPath: %s ", absPath);
  write ("getUserFilePath retVal: %d ", retVal);


  • 🍅 2️⃣ 停止CANoe的运行,看下输出结果和User Files配置里已经自动把test2.ini文件添加进来了


🌎总结

关于 CAPL路径的几个内置函数函数就说到这了,后续根据情况再追加其它函数,上面为了演示方便都是代码片段,学习的小伙伴可以亲自尝试下 ,想要完整脚本的,也可以取下面公众号的网盘里领取哦

✂️ 也可通过关注下方的公众号免费领取上面的源码,CANoe软件ISO标准学习资料等海量资源👇

  • 🍀要有最朴素的生活,最遥远的梦想,即使明天天寒地冻,路遥马亡!
  • 🍀一天码百字,百天一万字,成功没有捷径,坚持是唯一道理,与君共勉!
  • 🍀如果这篇博客对你有帮助,请 “点赞” “评论”“收藏”一键三连 哦!码字不易,大家的支持就是我坚持下去的动力。

以上是关于CAPL脚本中关于相对路径/绝对路径操作的几个傻傻分不清的内置函数的主要内容,如果未能解决你的问题,请参考以下文章

[原创]java WEB学习笔记35:java WEB 中关于绝对路径 和相对路径问题

CAPL脚本中关于 局部变量 容易忽略的一点

linux Ⅵ.文件与目录管理(路径,目录命令,cp,rm,mv)

jmeter参数化----绝对路径&相对路径

用于将绝对路径转换为当前现有相对路径的Linux命令

Shell脚本——获取脚本所在的绝对路径