使用LCD16032浏览flash中的文件和文件夹

本文介绍了一种在Wince系统中利用LCD16032显示器实现文件浏览的方法,包括文件搜索、文件夹遍历等功能,并讨论了如何通过U盘进行文件操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用 LCD16032 浏览 flash 中的文件和文件夹
LCD16032中我已经谈到过我写的这个液晶在wince下的串口驱动,现在我就在上面实现我需要的功能,希望能在上面浏览文件,通过U盘导出里面的文件,或者删除里面的文件!
wince下有一些用来查找文件的API,第一步就需要使用这些函数来封装一个查询文件的类。实现的基本功能有:超找制定文件,查找一个目录下的文件,创建一个文件夹下面所有文件名的一个文件列表!因为这个液晶和彩色液晶不同,他只能显示黑白,并且只有两行字可以选择!因此在超找文件的时候,我们可以用一个函数来超找一个文件夹下的所有文件名,并保存到一个列表当中去!
具体代码如下”.h”文件
class CCeFindFile
{
public:
        CCeFindFile();
         virtual ~CCeFindFile();
 
         BOOL FindFile(PTCHAR ptFileName);//查找文件
         BOOL CCeFindFile::FindFile(PTCHAR ptFilePath, PTCHAR ptcFileName);
         BOOL FindNextFile();//继续查找下一个
         void CloseFind();//关闭查找
         BOOL FindFileList(PTCHAR ptDirectory, PTCHAR ptSuffixName, DWORD& dwTotalFiles);//查找一个文件夹下的所有文件
         BOOL FindDirectoryFolders(PTCHAR ptcDirectory, PFILE_LIST ForSave, DWORD& dwTotalFolder);//查找一个路径下的所有文件夹类型
 
         BOOL GetFileName(PTCHAR ptFileName);//获取文件名
         BOOL GetFilePath(PTCHAR ptFilePath);//获取路径
         BOOL AddFilePath(const PTCHAR ptFileName, PTCHAR ptFilePath);//将当前路径添加到一个文件名
         void GetRootPath(const PTCHAR ptFileName);//获取根目录
         BOOL IsDirectory();//判断是否为路径
 
         LPWIN32_FIND_DATA m_pfiledata;
         LPWIN32_FIND_DATA m_pNextdata;
         PFILE_LIST m_pFileList;
         HANDLE m_hFileHandle;
         PTCHAR ptRootPath;
};
".cpp”文件如下:
 
 
#include "CeFindFile.h"
 
CCeFindFile::CCeFindFile()
{
         m_pfiledata = NULL;
         m_pNextdata = NULL;
         m_hFileHandle = INVALID_HANDLE_VALUE;
         ptRootPath = NULL;
}
 
CCeFindFile::~CCeFindFile()
{
         CloseFind();
}
 
BOOL CCeFindFile::FindFile(PTCHAR ptFileName)
{
         CloseFind();
         ptRootPath = new TCHAR[MAX_FILEPATH];
         m_pNextdata = new WIN32_FIND_DATA;
         GetRootPath(ptFileName);
         //查找文件
         m_hFileHandle = ::FindFirstFile( ptFileName, m_pNextdata );
         DWORD dwlasterror = GetLastError();
         if ( m_hFileHandle == INVALID_HANDLE_VALUE )
         {//未找到文件
                   CloseFind();
                   return FALSE;
         }
        
         return TRUE;
}
 
BOOL CCeFindFile::FindFile(PTCHAR ptFilePath, PTCHAR ptcFileName)
{
         TCHAR tcFullPathName[MAX_FILEPATH] = {0};
         DWORD dwFullPathLen = wcslen(ptFilePath) - 1;
 
         wcscpy(tcFullPathName, ptFilePath);
         if (_T('\\') != tcFullPathName[dwFullPathLen])
                   wcscat(tcFullPathName, _T("\\"));
        
         wcscat(tcFullPathName, ptcFileName);
        
         if (FALSE == FindFile(tcFullPathName))
                   return FALSE;
 
         return TRUE;
}
 
BOOL CCeFindFile::FindNextFile()
{
         if (m_hFileHandle == NULL)
                   return FALSE;
        
         if (m_pfiledata == NULL)
                   m_pfiledata = new WIN32_FIND_DATA;
        
         LPWIN32_FIND_DATA pTemp = m_pfiledata;
         m_pfiledata = m_pNextdata;
         m_pNextdata = pTemp;
        
         return ::FindNextFile(m_hFileHandle, m_pNextdata);
}
 
void CCeFindFile::CloseFind()
{
         DELETE_POINTER(m_pfiledata);
         DELETE_POINTER(m_pNextdata);
         DELETE_POINTER(ptRootPath);
         if( m_hFileHandle != NULL && m_hFileHandle != INVALID_HANDLE_VALUE )
         {
                   ::FindClose(m_hFileHandle);
                   m_hFileHandle = NULL;
         }
}
 
//查找一个文件夹下的所有文件,并保存到列表中,
//               ptDirectory                :        路径         _T("\\CortoiFlash")
//               ptSuffixName   :        后缀名(_T(".mp3")),NULL表示查找所有
BOOL CCeFindFile::FindFileList(PTCHAR ptDirectory, PTCHAR ptSuffixName, DWORD& dwTotalFiles)
{
         TCHAR FileNameForFind[MAX_FILEPATH] = {0};
         DWORD i = 0;
         m_pFileList = new FILE_LIST[512];
         wcscpy(FileNameForFind, ptDirectory);
         if (NULL == ptSuffixName)
         {
                   if (_T('\\') == ptDirectory[wcslen(ptDirectory) - 1])
                   {
                            wcscat(FileNameForFind, _T("*.*"));
                   }
                   else
                   {
                            wcscat(FileNameForFind, _T("\\*.*"));
                   }
         }
         else
         {
                   FindDirectoryFolders(ptDirectory, m_pFileList, i);
                   wcscat(FileNameForFind, _T("\\*"));
                   wcscat(FileNameForFind, ptSuffixName);
         }
         BOOL bRetValue = FALSE;
         bRetValue = FindFile(FileNameForFind);
         if (FALSE == bRetValue)
                   return FALSE;
         while (TRUE)
         {
                   bRetValue = FindNextFile();
                   //////////////////////////////////////////////////////////////////////////
                   //添加受保护文件名
                   //////////////////////////////////////////////////////////////////////////
                   m_pFileList[i].dwFileType = m_pfiledata->dwFileAttributes;
                   wcscpy(m_pFileList[i].FileName, m_pfiledata->cFileName);
                   i++;
                   if (i > 512)
                            break;
                   if (FALSE == bRetValue)
                   {
                            if (ERROR_NO_MORE_FILES == GetLastError())
                                     break;
                            else
                                     return FALSE;
                   }
         }
 
         dwTotalFiles = i;
         return TRUE;
}
 
BOOL CCeFindFile::FindDirectoryFolders(PTCHAR ptcDirectory, PFILE_LIST ForSave, DWORD& dwTotalFolder)
{
         TCHAR FileNameForFind[MAX_FILEPATH] = {0};
         DWORD i = 0;
         wcscpy(FileNameForFind, ptcDirectory);
         wcscat(FileNameForFind, _T("\\*.*"));
         BOOL bRetValue = FALSE;
         bRetValue = FindFile(FileNameForFind);
         if (FALSE == bRetValue)
                   return FALSE;
         while (TRUE)
         {
                   bRetValue = FindNextFile();
                   if(IsDirectory())
                   {
                            m_pFileList[i].dwFileType = m_pfiledata->dwFileAttributes;
                            wcscpy(m_pFileList[i].FileName, m_pfiledata->cFileName);
                            i++;
                   }
                   if (i > 512)
                            break;
                   if (FALSE == bRetValue)
                   {
                            if (ERROR_NO_MORE_FILES == GetLastError())
                                     break;
                            else
                                     return FALSE;
                   }
         }
         dwTotalFolder = i;
         return TRUE;  
}
 
BOOL CCeFindFile::GetFileName(PTCHAR ptFileName)
{
         if (m_pfiledata != NULL)
                   wcscpy(ptFileName, m_pfiledata->cFileName);
         else
                   return FALSE;
         return TRUE;  
}
 
BOOL CCeFindFile::GetFilePath(PTCHAR ptFilePath)
{
         if (m_pfiledata != NULL)
         {
                   wcscpy(ptFilePath, ptRootPath);
                   wcscat(ptFilePath, m_pfiledata->cFileName);
         }
         else
         {
                   return FALSE;
         }
         return TRUE;
}
 
BOOL CCeFindFile::AddFilePath(const PTCHAR ptFileName, PTCHAR ptFilePath)
{
         wcscpy(ptFilePath, ptRootPath);
         wcscat(ptFilePath, ptFileName);
         return TRUE;
}
 
void CCeFindFile::GetRootPath(const PTCHAR ptFileName)
{
         INT i = 0;
         DWORD dwStrLen = wcslen(ptFileName);
         wcscpy(ptRootPath, ptFileName);
         for (i = dwStrLen; i > 0; i--)
         {
                   if (ptRootPath[i] == _T('\\'))
                   {
                            break;
                   }
                   else
                   {
                            ptRootPath[i] = 0;
                   }
         }
}
 
BOOL CCeFindFile::IsDirectory()
{
         if (m_pfiledata != NULL)
         {
                   if(m_pfiledata -> dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
                            return TRUE;
                   else
                            return FALSE;
         }
         return FALSE;
}
注意,查找出来的文件全都只有文件名称,不是完整的路径,因此我们要操作一个文件的时候需要使用到刚开始打开的那个类里面的路径,添加到文件路径之后,才能经行正常的使用!并且我在处理的时候为了方便我现在使用的硬件,LCD16032,所以在文件名长度上做了一些设置,比如一个文件最长是多长!
 
对于这样一个没有键盘,没有鼠标的系统来说,我们使用这个浏览flash中的文件是非常有用的,文件浏览成功之后,我们可以使用这些名字来对相应的文件进行操作!
在我现在所使用的系统中,我使用U盘来进行升级,在U盘上安排好文件的存放规则,以及文件命名等,然后通过简单的几个按键就可以实现应用程序的升级,删除,导出文件等操作!这对一些没有界面或者键盘的系统来说是很方便的!
这些操作都可以使用winceAPI
MoveFile      重命名
CopyFile        复制文件
DeleteFile    删除文件
这些操作就可以基本可以实现上诉功能!
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
阅读(1042) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
评论热议
### 使用 eNSP 在 Gateway 设备上连接 FTP 服务并上传网关配置文件至 FTP 服务器 #### 配置环境准备 为了实现这一目标,需先确保网关设备已正确配置静态 IP 地址以及默认网关,以便于访问外部网络资源。这一步骤对于后续操作至关重要[^2]。 #### 启用FTP客户端功能 在华为系列路由器或交换机中,默认情况下可能并未开启FTP客户端的功能模块。因此,在命令行界面下输入如下指令来激活此特性: ```shell system-view ftp client enable ``` 上述命令用于进入系统视图模式,并启用FTP客户端支持。 #### 设置FTP用户名密码 为保障数据传输的安全性合法性,通常会预先设定好登录远端FTP站点所需的凭证信息。可通过下面的语句完成相应参数定义: ```shell ftp user username password ``` 这里`username`代表所使用的账号名称;而`password`则是对应的口令字符串。 #### 进入FTP交互式会话 当一切就绪之后,则可以通过指定目的主机地址的方式建立一次性的临时连接通道: ```shell ftp 192.0.2.1 ``` 此处假设FTP服务器位于IP地址为`192.0.2.1`的位置处。 如果之前已经成功设置了正确的认证资料,那么此时应该可以直接进入到远程目录浏览状态;反之则会被提示重新验证身份。 #### 获取当前工作路径 一旦建立了有效的通信链路后,建议首先确认自己处于哪个位置之下,以免误操作覆盖重要文档: ```shell pwd ``` 这条简单的查询可以帮助我们快速定位当前位置。 #### 更改本地/远程工作目录 根据实际需求调整源与目的地之间的相对关系,比如切换到特定子文件夹内进行下一步动作: ```shell lcd /flash/ cd backup/ ``` 这两条分别用来改变本地图像存储区间的指针指向 `/flash/` 文件夹,同时也在对方机器上的 `backup/` 子集里做好接收准备。 #### 上载选定对象 最后便是执行真正的传送过程——把先前保存下来的startup-config 或 running-config 文档发送过去: ```shell put startup.cfg ``` 以上就是整个流程的大致描述,当然还存在其他一些辅助性质的操作可供选用,例如下载(`get`)、删除(`delete`)等常规手段。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值