DELPHI基础教程:文件管理(一)[2]
文件名操作 Rename :文件更名 以文件变量为操作对象 RenameFile :文件更名 参数为文件的原名和新名 ChangeFileExt :改变文件扩展名 ExpandFileName :返回文件全路径名 ExtractFileExt :返回文件扩展名 ExtractFileName :从全路径名中返回文件名 ExtractFilePath :返回特定文件的路径 文件属性 FileGetAttr :返回文件属性 FileSetAttr :设置文件属性 文件状态 FileSize :返回文件对象大小 IOResult :返回上一次I/O操作的状态 FileExists :检测文件是否存在 文件日期 DateTimeToFileDate :把Delphi日期格式转换为DOS日期格式 FileDateToDateTime :把DOS日期格式转换为Delphi日期格式 FileGetDate :返回文件的DOS日期时间戳 FileSetDate :设置文件的DOS日期时间戳 文件读写 Read Readln :从文本或记录文件中读取变量 Write :将指定变量写入文本或记录文件 Writeln :将指定变量写入文本文件并写入一个行结束标志 FileRead :从一个指定文件中读取变量 FileWrite :向指定文件写入数据 FileRead和FileWrite都是以文件句柄为操作对象 主要供系统内部使用 目录操作 MkDir :创建当前目录的子目录 ChDir :改变当前目录 GetDir :返回特定磁盘的当前目录 RmDir :删除一个空子目录 磁盘操作 DiskFree :返回磁盘自由空间 DiskSize :返回特定磁盘的大小 文件查找 FileSearch :查找目录中是否存在某一特定文件 FindFirst :在目录中查找与给定文件名(可以包含匹配符)及属性集相匹配的第一个文件 FindNext :返回符合条件的下一个文件 FindClose :中止一个FindFirst / FindNext序列 有关文件管理标准过程/函数的更详细资料 请查阅Delphi相关的Help主题 以上的大部分过程在后面都有应用实例 读者可以从中体会其用法 在Delphi的联机帮助Help系统中把有关文件的过程/函数分为两个主题 I/O Routine和File_Management Routine 前者大部分以文件变量为操作对象 而后者大部分以文件名或文件句柄为操作对象 这里为了方便读者的使用 我们按功能重新进行了分类 在下一节中主要应用I/O Routine主题下的过程 而在第四节的综合举例中主要应用File_Management Routine主题下的过程 另外 Windows提供了许多有关文件管理的API函数 虽然在一般情况下 利用Delphi提供的函数已足够解决问题 但有时候仍然需要使用Windows API 在( )中我们就用到了Windows API函数GetDriveType 有关Windows API函数的情况 请读者参阅相关的资料 这里不再进行介绍 记录文件的应用 任务介绍 在这一节 我们开发一个系统安全性综合评估方法管理系统 系统安全性在复杂项目开发中十分重要 但由于牵涉面广因而很难获得客观 全面的评估值 鉴于此我们提出多角度 多侧面评估而后定量集成的思路 并在此基础上提出了多种安全性综合评估方法 每种方法由不同部门进行评估而后把结果汇总 综合 为此我们定义如下的记录类型 type TNature = (Micro Macro) {方法性质 分为微观和宏观两类} TMethod = Record Name: string[ ]; {方法名} Condition: string[ ]; {方法适用条件} Nature: TNature; {方法性质} Result: Real; {方法评估值} end; 用来记录不同方法的信息 由于不同方法的条件 性质不同 因而对工程开发的不同阶段适用方法集也不同 因此需要根据实际情况对方法集进行管理 我们把每一方法作为一条记录 每一方法集作为一个记录文件 下面讨论系统的实现方法 设计基本思路 本系统要实现的基本功能是文件的打开 创建 关闭 显示 记录的增加 修改 删除以及结果的综合和显示 为此我们使用了两组按钮分别用于文件和记录的操作 使用一个StringGrid控件来显示文件内容 使用一个只读编辑框显示结果的综合 其中各部件的名称 功能如下表所示 表 主窗口部件的设计 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 部件名称 主要属性 备注 ────────────────────────────────────── RecFileForm BorderStyle=bsDialog 文件打开后把文件名附到窗口标题后 Position=poScreenCenter StringGrid 大小行数动态确定 HazAttr(编辑框) ReadOnly=True 显示综合结果 OpenButton TabOrder= 打开一个记录文件 若文件不存在则创建 NewButton Caption= 打开 创建一个记录文件 若文件存在则打开 CloseButton Caption= 关闭 关闭一个已打开的文件 AddButton Caption= 增加 增加一条记录 ModifyButton Caption= 修改 修改一条记录 DeleteButton Caption= 删除 删除一条记录 CalcuButton Caption= 计算 计算最终结果并显示 ExitButton Caption= 退出 系统终止 若当前有打开的文件则先关闭 OpenDialog Filter= 选择或输入欲打开的文件 Record File(* Rec)| Rec |Any File(* *)|* * ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 另外 StringGrid HazAttr的标题用两个标签框(Label)来显示 另外我们还需要一个编辑对话框 其中四个编辑框Name Condition Nature Result分别对应TMethod记录的四个域 为协调程序运行 我们定义了一组全局变量 各变量的类型 作用如下表 表 全局变量及其作用 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 变量名 类型 作用 ───────────────────────────────── MethodFile MethodFileType 与当前打开文件相关联的文件变量 FileName string[ ] 当前打开文件的文件名 Count Count 当前打开文件的记录总数 CurrentRec Integer 当前处理记录号 FileOpened Boolean 当前是否有文件打开 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 记录文件类型MethodFileType的定义为 type MethodFileType = file of TMethod; 布尔变量FileOpened用于控制文件按钮的使能 变灰 记录按钮的反应以及系统结束时是否需要首先关闭文件 lishixinzhi/Article/program/Delphi/201311/25241
手机已删除的短信怎么恢复?
1、安装一个360优化大师。2、打开里面的优化清理选项,选择隐私清理,再选择隐私通话记录。3、系统会自动扫描,包括手机里面曾经删除掉的照片、短信、通话记录。4、扫描完成后,这些照片、短信、通话记录可以阅读。1、首先准备一个手机恢复精灵的APP软件;2、下载完之后,在手机上安装好,然后打开这个APP。(注意正常使用手机数据恢复精灵,需要Root)3、如果手机已经Root,那么选择短信恢复之后,需要稍等片刻,APP会自动进行扫描和恢复。注意期间要保持WIFI正常连接。4、等软件查找完之后,现在就可以看到之前删除掉的短信了,选择想要恢复的短信,点击下面的“恢复”按钮就可以了
DELPHI基础教程:文件管理(一)[3]
记录文件的打开和创建 记录文件的打开和创建同文本文件一样也需要关联和初始化两个步骤 同文本文件唯一的不同是不能使用Append过程 记录文件缺省情况下以读写方式打开 如果想以只读或只写方式打开 则需要修改System单元中定义的变量FileMode的值 FileMode的取值和意义如下表 表 FileMode的取值和意义 ━━━━━━━━━━━━━━ 取值 意义 ────────────── 只读 只写 读写 ━━━━━━━━━━━━━━ FileMode是一个全局变量 对它的每次修改都将影响所有Reset的操作 因此在打开自己的文件后应还原它的值 在本系统中 当用户按下 打开 按钮时 首先弹出一个标准文件打开对话框 要求用户输入或选择文件名 确认后如果该文件名的文件存在 则用Reset打开 若不存在则创建 程序清单如下 procedure TRecFileForm OpenButtonClick(Sender: TObject) begin if OpenDialog Execute then FileName := OpenDialog FileName else exit; AssignFile(MethodFile Filename) try Reset(MethodFile) FileOpened := True; except On EInOutError do begin try if FileExists(FileName) = False then begin ReWrite(MethodFile) FileOpened := True; end else begin FileOpened := False; MessageDlg( 文件不能打开 mtWarning [mbOK] ) end; except On EInOutError do begin FileOpened := False; MessageDlg( 文件不能创建 mtWarning [mbOK] ) end; end; end; end; if FileOpened = False then exit; Count := FileSize(MethodFile) if Count> then ChangeGrid; RecFileForm Caption := FormCaption+ +FileName; NewButton Enabled := False; OpenButton Enabled := False; CloseButton Enabled := True; end; 首先系统试图用Reset打开一个文件 并置FileOpened为True 如果文件不能打开 则引发一个I/O异常 在异常处理过程中 首先检测文件是否存在 若不存在则创建这个文件 否则是其它原因引发的异常 则把FileOpend重置为False 并显示信息 文件不能打开 在文件创建过程中仍可能引发异常 因而在一个嵌套的异常处理中把FileOpened重置为False 并提示信息 文件不能创建 有关异常处理的内容请读者参看第十二章 这段程序说明 异常处理机制不仅能使我们的程序更健壮 而且为编程提供了灵活性 当用户按下 创建 按钮时 系统首先弹出一个标准输入框 要求用户输入文件名 确认后系统首先检测文件是否存在 若存在则直接打开 否则创建一个新文件 打开或创建过程导致异常 则重置FileName和FileOpened两个全局变量 procedure TRecFileForm NewButtonClick(Sender: TObject) begin FileName := InputBox( 输入框 请输入文件名 ) if FileName = then Exit; try AssignFile(MethodFile FileName) if FileExists(FileName) then begin Reset(MethodFile) Count := FileSize(MethodFile) if Count> then ChangeGrid; end else begin Rewrite(MethodFile) count := ; end; FileOpened := true; Except on EInOutError do begin FileName := ; FileOpened := False; end; end; if FileOpened then begin NewButton Enabled := False; OpenButton Enabled := False; CloseButton Enabled := True; RecFileForm Caption := FormCaption+ +FileName; end; end; 当文件打开或创建后 所要做的工作有 ● 若文件非空 则计算文件长度 并用文件内容填充StringGrid ● 创建 打开 按钮变灰 关闭 按钮使能 ● 把文件名附到窗口标题后 记录文件的读入和显示 定义一个全局变量Count用来保存文件中的记录个数 当文件装入时 Count := FileSize(MethodFile) 如果Count > 则首先确定StringGrid 的高度 行数 为保证StringGrid 不会覆盖窗口下面的编辑框 定义一个常量MaxShow 当Count = MaxShow时 StringGrid 自动添加一个滚动棒 为保证滚动棒不覆盖掉显示内容 StringGrid 的宽度应留有余地 确定StringGrid 高度 行数的代码如下 With StringGrid do if count < MaxShow then Height := DefaultRowHeight * (Count+ )+ else Height := DefaultRowHeight * MaxShow+ ; RowCount := Count+ ; end; 而后从文件中逐个读入记录并显示在StringGrid 的相应位置 for i := to Count do begin Read(MethodFile MethodRec) ShowMethod(MethodRec i) end; ShowMehtod是一个过程 用来把一条记录填入StringGrid 的一行中 对于Name Condition域而言 只须直接赋值即可 而对Nature 域需要把枚举类型值转化为对应意义的字符串( : 微观 : 宏观 ) 而对Result域则需要把数值转化为一定格式的字符串 Str (MethodRec Result: : ResultStr) StringGrid Cells[ Pos] := ResultStr; 即Result显示域宽为 其中小数点后位数为 lishixinzhi/Article/program/Delphi/201311/25242