RenameFile,DeleteFile,MoveFile

Delphi的移动文件方法

uses
  
ShellApi;

procedure ShellFileOperation(fromFile: string; toFile: string; Flags: Integer);
var
  
shellinfo: TSHFileOpStructA;
begin
   with
shellinfo do
   begin
    
wnd    := Application.Handle;
     wFunc := Flags;
     pFrom := PChar(fromFile);
     pTo    := PChar(toFile);
  end;
   SHFileOperation(shellinfo);
end;

// Example, Beispiel:

procedure TForm1.Button1Click(Sender: TObject);
begin
  
ShellFileOperation('c:\afile.txt', 'd:\afile2.txt', FO_COPY);
  // To Move a file: FO_MOVE
end;

 
该方法的另一种表示:
function TScanFileThread.MoveFile(FileName: string): Boolean;
var
  F: TShFileOpStruct;
begin
  with F do begin
    Wnd := Handle;
    wFunc := FO_MOVE;
    pFrom := PChar(Directory + FileName + #0#0);
    pTo := PChar(SaveDirectory + FileName + #0#0);
    fFlags := FOF_RENAMEONCOLLISION or FOF_NOCONFIRMMKDIR;
  end;
  if ShFileOperation(F) = 0 then begin
    Result := True;
  end
  else begin
    Result := False;
  end;
end;

一开始pFrom和pTo没有以“#0#0”结尾,结果发现在有的机器上能移动成功,有的机器上SHFileOperation返回1026无法转移,查了一下资料

ShFileOperation中的pFrom和pTo中可以包含多个文件名,文件名之间用 '\0' 分割,最后以两个\0结束。

/////////////////////////////////////////////////////////////////////////

1、
CopyFile(PChar(源目录),PChar(目标目录),True);

CopyFileTo('F:\MyProject\delphi\message\data\data.mdb','c:\data.mdb');//不能覆盖已存在的文件******//   
//***************下面的这个WINAPI最后的一个参数为true时不覆盖已经存在的文件。为false时自动覆盖存在的文件。*********//   
//***************   
CopyFile(pchar(''+MyPath+'/data/data.mdb'),pchar(''+MyPath+'/data/backup.mdb'),false);

2、
api的不会   
我一般是在程序中根据程序所在目录建立一个批处理文件   
copy    x:\xxx\xxx.exe    c:;   
exit;   
   
在窗体创建或退出时执行;   
因为在外地网吧,所以不能提供代码,不过这个应该不难。

3、
也可以直接调用shellexec    winexec,   
shellexec('copy    gp.exe    c:')

4、
不用api的如下:   
procedure    CopyFile    (SourceName,    TargetName:    String);   
var   
      Stream1,    Stream2:    TFileStream;   
begin   
      Stream1    :=    TFileStream.Create    (SourceName,    fmOpenRead);   
      try   
          Stream2    :=    TFileStream.Create    (TargetName,    fmOpenWrite    or    fmCreate);   
          try   
              Stream2.CopyFrom    (Stream1,    Stream1.Size);   
          finally   
              Stream2.Free;   
          end   
      finally   
          Stream1.Free;   
      end   
end;

5、
如果是在本程序运行的时候复制本程序的话,可以这样:   
   
procedure    Tform1.formCreate(Sender:    TObject);   
var   
      s:Pchar;   
begin   
      s:=    Pchar(Application.ExeName);   
      copyfile(s,    'c:\a.exe',    true);   
end;

6、
CopyFile(PChar(源文件),PChar(目标文件),True);为False表示覆盖

7、
才看到这个贴子,可以用以下的方法:   
   
CopyFile(pchar('c:\sql.txt'),    pchar('d:\sql.txt'),    True);   
   
只要是文件的复制,都可以。   
   
移动文件:   
MoveFile(pchar('c:\sql.txt'),    pchar('d:\sql.txt'));   
   
删除文件:   
   
DeleteFile('c:\sql.txt');   
   
以上都是可行的。

Delphi的移动文件方法(转)/删除文件:/文件的复制的更多相关文章

  1. 应用程序启动后修改自身EXE文件或自删除EXE文件(附VC++6.0源码)

    在CSDN论坛看到这么一个问题:如何为第三方工具加上使用限制次数?问题的答案很简单,重新做一个应用程序,将第三方程序打包进这个应用程序,启动应用程序时可以检查第三方工具的使用次数,检查通过,可运行第三 ...

  2. linux批量压缩当前目录中文件后,删除原文件

    linux批量压缩当前目录中文件后,删除原文件 for i in `ls|awk -F " " '{print $NF}'`; do tar -zcvf $i.tar.gz $i ...

  3. Python之文件处理-递归删除特定文件

    Python之文件处理-递归删除特定文件 #!/usr/bin/env python # -*- coding:utf-8 -*- import os def delete_particular_fi ...

  4. 指定文件夹 指定文件后缀名 删除整个文件夹 git 冲突解决 create a new repository on the command line push an existing repository from the command line

    http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/001375840038939c2 ...

  5. IO流案例:1.复制多级文件夹 2.删除多级文件夹

    package copy; /* 需求:复制多级文件夹 复制d:\\itcast(包含文件和子文件夹)到模块目录下 分析: d:\\itcast a.txt b.txt javaweb a.xml b ...

  6. 两个简单的python文件,实现删除本地文件夹和mongodb数据库的内容

    删除本地文件夹: import os , string , datetime ; str = '/home/niuguoqin/tmp/tomcat/'; b = (datetime.datetime ...

  7. [转载] 与WIN不同,linux替换文件夹会删除原文件夹下的全部内容!

    今天差点把源码给覆盖掉了><...555... 虚惊一场!!看了一篇博客分析这种情况.我的环境是CentOS5.5,不会出现文件夹直接被覆盖的情况,但是在Linux下不要用Win下的一些直 ...

  8. centos 文件新建、删除、移动、复制等命令

    创建目录 mkdir 文件名 mkdir /var/www/test cp复制命令 cp命令复制文件从一个位置到另一位置.如果目的地文件存在,将覆复写该文件: 如果目的地目录存在,文件将复制到该目录下 ...

  9. 从a文件判断是否删除b文件中的行(sed示例)

    bash&shell系列文章:http://www.cnblogs.com/f-ck-need-u/p/7048359.html test.xml文件很大,内容结构如下: <?xml v ...

随机推荐

  1. hdu 3544 Alice's Game 博弈论

    博弈论+二分! 后一人会尽量选前一人切小的一块切!! 代码如下: #include<iostream> #include<stdio.h> #define I1(x) scan ...

  2. jmeter 响应结果分析一

    转自:http://www.cnblogs.com/Carrie_Liang/archive/2008/11/05/1327604.html Jmeter测试结果分析这一篇,我打算分成上下两部分.上篇 ...

  3. 苹果p12文件--一个苹果证书怎么多次使用(蛋疼,这些问题只有和其他企业合作才会遇到,别人的账号不可能给你,蛋疼....)

    在苹果开发者网站申请的证书,是授权mac设备的开发或者发布的证书,这意味着一个设备对应一个证书,但是99美元账号只允许生成3个发布证书,两个开发证书,这满足不了多mac设备的使用,使用p12文件可以解 ...

  4. rand5()产生rand7()

    http://www.cnblogs.com/dwdxdy/archive/2012/07/28/2613135.html 利用rand5()产生rand7().rand5()产生1到5的整数,ran ...

  5. 初始化D3D设备

    bool initD3D(HWND hWnd) { // 主要目的是获取设备,为调用下面的函数做很多准备. // 比如 获取IDirect3D9 ,获取支持的顶点处理,填充后备缓冲相关参数等. // ...

  6. 【转】五种开源协议的比较(BSD, Apache, GPL, LGPL, MIT)

    当 Adobe.Microsoft.Sun 等一系列巨头开始表现出对”开源”的青睐时,”开源”的时代即将到来! 现今存在的开源协议很多,而经过 Open Source Initiative 组织通过批 ...

  7. 关于C的一些理解

    关于字符数组和字符指针 关于相互赋值问题一只有疑问,其实是自己搞不清指针和地址的关系.地址可以指向一块内存但是不一定存在于内存,比如字符数组名,数组名是地址,但是不实际存在于内存中,无法修改,而字符指 ...

  8. 从今天起,正式步入cnblogs,向曾经的脚印说声对不起!

    步入这个行业也好多年了,从来没有定居过一个地方. 看过很多前辈们留下的资料,对后者门(其中还有我)留下很多珍贵的东西. 所以,我要向前辈学习,壮大自己,在学习的同时,不要忘记帮助别人. 对曾经我留下的 ...

  9. WinCE启动失败的原因与解决办法分析

    本文通过一个真实的嵌入式项目进行说明.文中的嵌入式系统用的是ARM处理器+WinCE平台,项目的目的是要把WinCE平台从旧版本移植到WinCE6.0平台上.但结果是这个WinCE系统在启动的时候经常 ...

  10. Mac修改用户名

    Mac 修改用户是一件很悲剧的事,因为牵涉到很多地方的修改,当然,如果只是需要满足登陆用户名的修改的话,就比较简单.而如果需要将某个用户在每一个地方显示的名字都改掉的话,就要修改不是地方了,下面就来讲 ...