精华内容
下载资源
问答
  • 咱们先看看“不支持长文件名”的文件系统和“支持长文件名”的文件系统分别读一个比较长的文件名显示的效果吧。 下面是“不支持长文件名”的文件系统读出来的: 下面是“支持长文件名”的文件系统读出来的: ...

    “长文件名”“短文件名”的详细概念请自行去百度谷歌搜狗搜索。

    我们现在只需要知道一个文件名称长了,就是长文件名,例如sdjflasdjfas.txt;一个文件的名称短了,就是短文件名,例如a.txt。

    有人会问,文件名干嘛要分长短?这个问题属于计算机历史问题了。想深究,去百度吧。

    咱们先看看用“不支持长文件名”的文件系统和“支持长文件名”的文件系统分别读一个比较长的文件名显示的效果吧。

    下面是“不支持长文件名”的文件系统读出来的:

    下面是“支持长文件名”的文件系统读出来的:

    很显然,文件系统如果不支持长文件名,岂能用哉?

    以FatFs为例,刚刚移植好的文件系统,默认是不支持长文件名的,要想支持长文件名,需要打开ffconf.h文件进行配置,找到_USE_LFN,把值从0改到1。如下图所示:

    改成1以后,任务还没有完成。为了能够支持中文,还需要把_CODE_PAGE的值改为936,如下图所示:

    这时候,你编译一下,系统会有如下错误产生:

    .\RationEB_Proj.axf: Error: L6218E: Undefined symbol ff_convert (referred from ff.o). .\RationEB_Proj.axf: Error: L6218E: Undefined symbol ff_wtoupper (referred from ff.o). Not enough information to list image symbols. Finished: 1 information, 0 warning and 2 error messages. ".\RationEB_Proj.axf" - 2 Error(s), 0 Warning(s).
    

    提示,找不到ff_convert()和ff_wtoupper()这两个函数。

    ff_convert()函数用来把Unicode和GBK之间进行转换。因为文件系统的文件名默认存储方式为Unicode编码,而我们编译器甚至是电脑,用的中文码为GBK。

    比如说,现在我要把一个文件名读出来显示到TFT上,当我们读完文件名以后,文件名实际上是由Unicode编码的,这时候,我们就需要找到这些Unicode码对应的GBK码,因为我们的字库是按照GBK编码的,所以需要用到ff_convert()函数里面的Unicode转GBK转换表来转换。由于中文有2万多个汉字,这张转换表实在是太大了,编译不通过,因为单片机容量太小了。所以我们把这张表格放到外部的FLASH吧。

    再比如说,我们要在SD卡上新建文件,我们给它的名字是由GBK编码的,而文件名存储,必须是Unicode才行,这时候就需要用到GBK转Unicode的表格。这张表同样很大,所以我们把这张表也放到外部的FLASH里面。

     

    ff_wtoupper()函数是用来英文大小写转换的,比如说,我们把文件名写为ABC.TXT,我们读abc.txt同样会读到这个文件。就是这个文件起的作用。

     

    这两个函数,位于cc936.c文件中,所以我们要把这个文件添加到工程中,cc936.c文件位了FatFs源码的option文件夹当中。

    添加好后的工程如下所示:

    打开cc936.c文件,ff_wtoupper()文件不用修改。把ff_convert()函数里面的U2G和G2U两张表格数据删除,把函数修改为读取外部的FLASH,来进行U2G和G2U的转换。修改后的函数为:

    WCHAR ff_convert ( /* Converted code, 0 means conversion error */
    WCHAR src, /* Character code to be converted */
    UINT dir /* 0: Unicode to OEMCP, 1: OEMCP to Unicode */
    )
    {
      WCHAR c;
      uint32_t offset; // W25X16地址便宜
      uint8_t GBKH,GBKL; // GBK码高位与低位
      uint8_t unigbk[2]; // 
      uint8_t gbkuni[2]; // 
    
      if (src < 0x80) /* ASCII */
      { 
        c = src;
      }
      else
      {
        if(dir == 0) /* Unicode to GBK */
        {
          if( (src > 0x4DFF) && (src < 0x9FA6) )
          {
            offset = ((((uint32_t)src - 0x4E00) * 2) + 0x0C0000); 
            W25Q16_Read(unigbk,offset,2); 
            c = (((uint16_t)unigbk[0])<<8)+(uint16_t)unigbk[1]; 
          }
          else c = 0xA1A1; //如果是其它符号,都用NULL代替
        }
        else if(dir == 1) /* GBK to Unicode */
        {
          GBKH=(uint8_t)(src>>8); 
          GBKL=(uint8_t)(src); 
          GBKH-=0x81;
          GBKL-=0x40;
          offset=((uint32_t)192*GBKH+GBKL)*2;
          W25Q16_Read(gbkuni,offset+0x0D0000,2); 
          c = (((uint16_t)gbkuni[1])<<8)+(uint16_t)gbkuni[0];
        }
      }
      return c;
    }

    两张大表放到外部flash,这里就精简很多了吧。

    不过,这时候,还是有一些中文符号无法显示,例如常用的书名号《》,中文顿号、,中文双引号 单引号,中文括号【】等都不能显示。这时候,我们可以手动添加进去让其显示,如下:

    WCHAR ff_convert ( /* Converted code, 0 means conversion error */
    WCHAR src, /* Character code to be converted */
    UINT dir /* 0: Unicode to OEMCP, 1: OEMCP to Unicode */
    )
    {
      WCHAR c;
      uint32_t offset; // W25X16地址便宜
      uint8_t GBKH,GBKL; // GBK码高位与低位
      uint8_t unigbk[2]; // 
      uint8_t gbkuni[2]; // 
    
      if (src < 0x80) /* ASCII */
      { 
        c = src;
      }
      else
      {
        if(dir == 0) /* Unicode to GBK */
        {
          switch(src)
          {
          case 0x3001: c = 0xA1A2;break;	   // 支持符号: 、 中文顿号
          case 0x300A: c = 0xA1B6;break;     // 支持符号:《
          case 0x300B: c = 0xA1B7;break; 	   //  支持符号:》
          case 0x201C: c = 0xA1B0;break;	   // 支持符号: “	中文左双引号
          case 0x201D: c = 0xA1B1;break;     // 支持符号:”   中文右双引号
          case 0x2606: c = 0xA1EE;break; 	   //  支持符号:☆
          case 0x2605: c = 0xA1EF;break;	   // 支持符号: ★
          case 0x2018: c = 0xA1AE;break;     // 支持符号:‘ 中文左单引号
          case 0x2019: c = 0xA1AF;break; 	   //  支持符号:’中文右单引号
          case 0x3010: c = 0xA1BE;break;	   // 支持符号: 【
          case 0x3011: c = 0xA1BF;break;     // 支持符号: 】
          case 0x3016: c = 0xA1BC;break; 	   //  支持符号:〖
          case 0x3017: c = 0xA1BD;break;	   // 支持符号: 〗
          case 0x2299: c = 0xA1D1;break;     // 支持符号:⊙
          case 0x2116: c = 0xA1ED;break; 	   //  支持符号:№
          case 0x2236: c = 0xA1C3;break;	   // 支持符号: ∶
          case 0x203B: c = 0xA1F9;break;     // 支持符号:※
          case 0x221E: c = 0xA1DE;break; 	   //  支持符号:∞
          default:
          if( (src > 0x4DFF) && (src < 0x9FA6) )
          {
            offset = ((((uint32_t)src - 0x4E00) * 2) + 0x0C0000); 
            W25Q16_Read(unigbk,offset,2); 
            c = (((uint16_t)unigbk[0])<<8)+(uint16_t)unigbk[1]; 
          }
          else c = 0xA1A1; //如果是其它符号,都用NULL代替
          break;
        }
        else if(dir == 1) /* GBK to Unicode */
        {
          GBKH=(uint8_t)(src>>8); 
          GBKL=(uint8_t)(src); 
          GBKH-=0x81;
          GBKL-=0x40;
          offset=((uint32_t)192*GBKH+GBKL)*2;
          W25Q16_Read(gbkuni,offset+0x0D0000,2); 
          c = (((uint16_t)gbkuni[1])<<8)+(uint16_t)gbkuni[0];
        }
      }
      return c;
    }

    如果你还想支持其他一下特殊符号,可以利用Unicode码和GBK码转换软件自行添加。

    想看该例程源文件。可以下载瑞生LPC1114 V3.0开发板资料,位于应用篇例程6。

    如何设置FatFs文件系统支持长文件名_eagle11235的博客-CSDN博客
    https://blog.csdn.net/eagle11235/article/details/52606089

     

    展开全文
  • eclipse 根据路径文件名定位文件

    千次阅读 2018-09-23 11:44:08
    以前ctrl+shift+r 根据文件名正则匹配文件,能够很快定位到具体的文件。 后来我遇到了恩 类似于如下图这样(习惯起相同文件名的队友) 解决办法 苦搜网上无果,本来心思开发个eclipse插件,后来插入一个项目要...

    前言

    以前用ctrl+shift+r 根据文件名正则匹配文件,能够很快定位到具体的文件。
    后来我遇到了恩 类似于如下图这样(习惯起相同文件名的队友)
    在这里插入图片描述

    解决办法

    苦搜网上无果,本来心思开发个eclipse插件,后来插入一个项目要带领,就搁置了一段时间,没想到,翻出来这个问题,突然找到答案

    方法1 操作后面会补充如何更快加速操作

    废话不多说,我就直接上图了
    正则路径搜索匹配(第一张图可以设置快捷键,在文章后面会演示)
    在这里插入图片描述
    在这里插入图片描述

    点击打开 就是下图效果,很方便
    在这里插入图片描述

    ps 如何快速定位到文件路径

    1.快速定位项目磁盘路径(如果知道可以跳过)
    在这里插入图片描述
    在这里插入图片描述
    2.设置open File 快捷键
    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • ...以下代码 递归遍历 一个文件夹内的所有文件夹和文件: find(char * lpPath){ char szFind[MAX_PATH]; WIN32_FIND_DATA FindFileData; strcpy(szFind,lpPath); strcat(szFind,"\\*.*"); HANDLE

    转自:http://wenda.so.com/q/1384705480060703

    以下代码 递归遍历 一个文件夹内的所有文件夹和文件:

    find(char * lpPath){ char szFind[MAX_PATH]; WIN32_FIND_DATA FindFileData; strcpy(szFind,lpPath); strcat(szFind,"\\*.*"); HANDLE hFind=::FindFirstFile(szFind,&FindFileData); if(INVALID_HANDLE_VALUE == hFind) return; while(TRUE) { if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { if(FindFileData.cFileName[0]!='.') { strcpy(szFile,lpPath); strcat(szFile,"\\"); strcat(szFile,FindFileData.cFileName); find(szFile); } } else { cout << FindFileData.cFileName; } if(!FindNextFile(hFind,&FindFileData)) break; } FindClose(hFind);}


    剩下的就是关键字与文件名的比较了, 如果你说的模糊查询指的是文件名包含关键字, 那用strstr比较就可以了.

    展开全文
  • 一、我的文件在哪里?  1、告诉计算机文件在哪  使用路径描述位置  绝对路径——从根目录写到底 ... 3、对比后打印文件名  循环来实现逐个比对,素材链接:https://files.cnblogs.com/files/Lamfai/...

    一、我的文件在哪里?

      1、告诉计算机文件在哪

      使用路径描述位置

        绝对路径——从根目录写到底

      内置模块OS

        路径

        目录

        文件

        其他系统操作

      2、描述文件的特征

      用条件判断来筛选

      3、对比后打印文件名

      用循环来实现逐个比对,素材链接:https://files.cnblogs.com/files/Lamfai/script_project1_files.zip

    import os
    # 路径(鼠标右键查看文件属性)
    path = 'C:/Users/Lamfai/Desktop/files'
    files = os.listdir(path)
    # 查找文件名字含有fish且以.png后缀的文件
    for f in files:
        if 'fish' in f and f.endswith('.png'):
            print('Found it!' + f)

     

      4、使用 Python 从这中筛选出符合这些特征的文件:
      (1) 除了 gif 类型之外的其他类型 ;
      (2) 名字中包含有关键词 “project30”或者“commercial”。

      素材链接:https://files.cnblogs.com/files/Lamfai/files.zip

    # 使用 Python 从这中筛选出符合这些特征的文件:
    # 1. 除了 gif 类型之外的其他类型
    # 2. 名字中包含有关键词 “project30”或者“commercial”
    
    import os
    # 路径(设置 path 变量,存储路径)
    path = 'C:/Users/Lamfai/Desktop/files'
    # 利用 os 模块中的 listdir 函数,将路径中的所有文件存储到一个 list 变量中。
    files = os.listdir(path)
    # 查找文件名字含有关键词 “project30”或者“commercial”且不以gif后缀的文件
    # 利用 for 语句浏览 list 变量中的所有元素
    for f in files:
        # 利用 if 语句判断文件名是否符合要求。其中, endswitch 函数用来判断一个字符串是否包含某个后缀。
        # 成员运算符 in 用来判断一个字符串是否包含某个子串。不同的条件用 and 或者 or 来连接。
        if (not f.endswith('.gif')) and ('project30' in f or 'commercial' in f):
            print('Found it!' + f)

     

      提示:

      1、出现报错 No such file or directory 怎么办?No such file or directory 的含义是不存在这个文件或路径,可能是以下几个原因造成的:

      (1)电脑上没有这个文件夹。文件夹的名字包括大小写需完全一致。

      (2)路径不对。绝对路径的写法有三种:

        ①正斜线。C:/Users/Lamfai/Desktop/files

        ②两个反斜线。C:\\Users\\Lamfai\\Desktop\\files

        ③在路径外面加 r 。r'C:\Users\Lamfai\Desktop\files'

        参考020100_01——绝对路径与相对路径

      (3)没有在本地运行代码。

      (4)使用相对路径没有把 .py 文件放到要处理的文件夹内。

     

    转载于:https://www.cnblogs.com/Lamfai/p/9398358.html

    展开全文
  • 如何使用Win7自定义搜索 (系统:搜索:Win7自定义搜索:如何在win7下强制只搜索文件名) 习惯WinXP的使用者刚开始不习惯Win7的搜索,实际上只要掌握部分技巧,win7的搜索是更方便了,如自定义搜索。 1 自定义...
  • pyqt-GetOpenFileName获取的文件的路径加文件名如何分开 GetOpenFileName直接获得是文件的绝对路径+文件名称,有时需要分开使用,之前使用正则方式切开,或者字符串从末端反向搜索到第一个/,这次使用的是split...
  • 这里以精确查找、模糊查找和特定查找3种查找为例,简单介绍一下python是如何查找文件的,主要用到python自带的模块os(walk函数),感兴趣的朋友可以自己尝试一下,实验环境win10+python3.6+pycharm2018,主要内容如下...
  • 在ubuntu下如何搜索文件

    万次阅读 2019-06-10 11:32:10
    1.whereis 文件名 特点:快速,但是是模糊查找 例如: whereis php #会把php,php.ini,php.*所在的目录都找出来. 2.find / -name 文件名 特点:准确,但速度慢,消耗资源大 例如: 如果想找到php.ini的准确位置,需要 ...
  • 如何用命令搜索,介绍下强大的find命令: find -name 后跟文件名 表示搜索指定文件。搜到了,就打印出来,搜不到,啥也不显示。 find 目录 表示搜索该目录下的所有文件 如fine / find 目录 -name "sup*" 在该...
  • 搜索、查找文件当中的内容,一般最常用的是grep命令,另外还有egrep, vi命令也能搜索文件里面内容 假如是非压缩包文件,可以grep命令去搜索,例如: grep –i “被查找的字符串” 文件名 假如是.gz压缩包类型的...
  • ubuntu下如何搜索文件?

    2017-03-15 18:50:11
    1.whereis 文件名 ...我一般的查找都这条命令.2.find / -name 文件名 特点:准确,但速度慢,消耗资源大,例如我想找到php.ini的准确位置,就需要 #find / -name php.ini3.locate 文件名 强力推荐的
  • ubuntu - 如何搜索文件?

    2015-11-16 16:15:00
    1.whereis 文件名  特点:快速,但是是模糊查找,例如 找 #whereis mysql 它会把mysql,mysql.ini,mysql.*所在的目录都找出来.我一般的查找都这条命令. 2.find / -name 文件名  特点:准确,但速度慢,消耗资源大,...
  • 在ubuntu下如何搜索文件?

    千次阅读 2018-11-07 10:20:28
    1.whereis 文件名  特点:快速,但是是模糊查找,例如 找 #whereis mysql 它会把mysql,mysql.ini,mysql.*所在的目录都找出来.我一般的查找都这条命令.  2.find / -name 文件名  特点:准确,但速度慢,消耗资源...
  • 您必须使用从原始文件...最后将临时文件替换为原始文件名.这是执行此操作的代码:import java.io.BufferedReader;import java.io.File;import java.io.FileReader;import java.io.FileWriter;import java.io.IOExce...
  • 一些系统文件只有在管理员权限下才能修改,...1. 在左下角的菜单栏上搜索 命令提示符 并用管理员身份打开,记住一定要管理员身份打开。 2. 接着cd到你要修改的文件目录下 , 使用命令 start 文件名 打开文件。 ...
  • 如何将现成的hex文件用keil烧写

    万次阅读 2016-03-17 10:39:09
    1、将hex文件转成elf文件,方法要自行先搜索一下。 2、新建一个工程,选这好CPU,不要添加启动代码。 3、把生成的hex文件或elf文件复制到新工程的目录下。 4、在工程的options->Output选项里,把Name of ...
  • ubuntu下搜索文件

    2015-01-07 18:07:59
    在ubuntu下如何搜索文件?   1.whereis 文件名 www.2cto.com     特点:快速,但是是模糊查找,例如找 #whereis mysql 它会把   mysql,mysql.ini,mysql.*所在的目录都找出来.我一般的查找都这条命令.  ...
  • ubuntu 下搜索文件

    2009-09-18 11:17:00
    在ubuntu下如何搜索文件?  1.whereis 文件名  特点:快速,但是是模糊查找,例如 找 #whereis mysql 它会把mysql,mysql.ini,mysql.*所在的目录都找出来.我一般的查找都这条命令.  2.find / -name 文件名  ...
  • 4. org-mode/Org-mode写作:如何导出部分内容.org 这里的四个文件带有冒号为其文件名的一部分,因此无法在windows中检出(操作系统不支持)。</p><p>该提问来源于开源项目:lujun9972/...

空空如也

空空如也

1 2 3 4 5 ... 10
收藏数 193
精华内容 77
关键字:

如何用文件名搜索文件