文件复制:C语言方法、Windows API的两种方法

#include <stdio.h>
#include <errno.h>

#define BUF_SIZE 256

int main(int argc, char *argv[])
{
    FILE *inFile, *outFile;
    char rec[BUF_SIZE];
    size_t bytesIn, bytesOut;

    if(argc != 3)
    {
        printf("Usage:cpc file1 file2\n");
        return 1;
    }

    inFile = fopen(argv[1],"rb");
    if(inFile == NULL)
    {
        perror(argv[1]);
        return 2;
    }

    outFile = fopen(argv[2],"wb");
    if(outFile == NULL)
    {
        perror(argv[2]);
        return 3;
    }

    while((bytesIn = fread(rec,1, BUF_SIZE,inFile))>0)
    {
        bytesOut = fwrite(rec, 1, bytesIn,outFile);
        if(bytesIn != bytesOut)
        {
            perror("Fatal write error.");
            return 4;
        }
    }

    fclose(inFile);
    fclose(outFile);
    return 0;
}
#include <Windows.h>
#include <stdio.h>

#define BUF_SIZE 256

int main(int argc, LPTSTR argv[])
{
    HANDLE hIn, hOut;
    DWORD nIn, nOut;
    CHAR buffer[BUF_SIZE];

    if(argc != 3)
    {
        printf("Usage:cpw file1 file2\n");
        return 1;
    }
    hIn = CreateFile(argv[1],GENERIC_READ, FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
    if(hIn == INVALID_HANDLE_VALUE)
    {
        printf("Canno open input file. Error:%x\n",GetLastError());
        return 2;
    }

    hOut = CreateFile(argv[2],GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL);
    if(hOut == INVALID_HANDLE_VALUE)
    {
        printf("Cannot open output file.Error:%x\n",GetLastError());
        return 3;
    }

    while(ReadFile(hIn, buffer, BUF_SIZE,&nIn, NULL) && nIn > 0)
    {
        WriteFile(hOut, buffer, nIn,&nOut,NULL);
        if(nIn != nOut)
        {
            printf("Fatal write error:%x\n",GetLastError());
            return 4;
        }
    }
    CloseHandle(hIn);
    CloseHandle(hOut);
    return 0;
}
#include <Windows.h>
#include <stdio.h>

int main(int argc, LPTSTR argv[])
{
    if(argc != 3)
    {
        printf("Usage:cpcf file1 file2\n");
        return 1;
    }
    if(!CopyFile(argv[1], argv[2],FALSE))
    {
        printf("CopyFile Error:%x\n",GetLastError());
        return 2;
    }

    return 0;
}
时间: 2024-10-07 20:47:04

文件复制:C语言方法、Windows API的两种方法的相关文章

C语言播放声音最简单的两种方法

1. 假设仅须要播放波形文件wav格式的声音,非常easy.仅仅需一句话: PlaySound(TEXT("Data\\1.wav"), NULL, SND_FILENAME | SND_ASYNC | SND_LOOP); 在这里仅仅提供方法,具体问题自己去探索. 完整C语言代码: #include <windows.h> #pragma comment(lib, "Winmm.lib") int main(int argc, char *argv[]

使用linux访问windows共享文件的两种方法

上次做了一个linux的samba文件共享,使windows可以访问linux共享出来的文件目录,今天做一个在windows中共享文件或者使用软件使linux主机可以访问windows共享出来的文件及目录.实际操作才是重点. 实验目的:使用linux访问windows共享文件. 实验步骤:主要分为两种方式,第一种是使用xshell.xftp软件直接拖拽,然后在linux系统中找到文件就可以使用了. 第二种是在windows中共享文件目录,然后在linux中使用命令进行访问,最后挂载并使用. 首先

vmware虚拟机挂载Windows磁盘的两种方法

第一种 vmware虚拟机通过ntfs-3g挂接windows盘 1.共享windows盘虚拟机设置-->添加硬盘-->选择IDE-->使用物理磁盘-->选择本地盘(单分区)-->默认完成添加 2.上传ntfs-3g-2017.3.23-6.el7.x86_64.rpm安装:rpm -ivh ntfs-3g-2017.3.23-6.el7.x86_64.rpm 3.挂载:查看本地磁盘列表:fdisk -l挂载:mount -t ntfs-3g /dev/sdb1 /data1

C#把某个数组的一部分复制到另一个数组中的两种方法:Buffer.BlockCopy和Array.Copy

static void Main(string[] args) { int[] src = new[] { 1, 2, 3, 4, 5, 6 }; const int destLen = 4;//目标数组大小 int int_size = sizeof(int);//用于获取值类型的字节大小. int[] dest = new int[destLen]; //只支持基元类型,按字节偏移复制 Buffer.BlockCopy(src, (src.Length - destLen) * int_si

读取文件中某个字符串前面的内容,两种方法

方法一:利用PushbackReader,默认有个长度为1的缓冲区,创建对象时需要指出缓冲区的大小. public static void function1(File f)throws IOException { try(PushbackReader pr = new PushbackReader(new FileReader(f), 64)) { char[] cbuf = new char[32]; String lastContent = ""; String content

shell中调用R语言并传入参数的两种方法

第一种: Rscript myscript.R R脚本的输出 第二种: R CMD BATCH myscript.R # Check the output cat myscript.Rout 调用R脚本的全部控制台log 传入参数: 在脚本中add args<-commandArgs(TRUE) 然后shell中: Rscript myscript.R arg1 arg2 arg3 注意取出来的参数是所有参数连在一起的character

将应用代码由eclipse导入Android studio的方法NDK-Build和Cmake两种方法(以android_serialport_api为例)

网上翻了几百篇博客,看了半天,要不就是写的乱七八糟看不懂,要不就是隐藏了一些细节,要不就是实现不了,最后还是在Android官网上看明白了,而且说得有条有理,以后遇到不懂的一定要先翻官网. 参考资料:https://developer.android.com/studio/projects/add-native-code.html?utm_source=android-studio#link-gradle 1. 导入eclipse到Android studio 1. 导入工程: 点击如下所示:

c#访问数据库的两种方法以及事务的两种方法

1 //2015/07/03 2 using System; 3 using System.Collections.Generic; 4 using System.Linq; 5 using System.Text; 6 using System.Threading.Tasks; 7 using System.Data; 8 using System.Data.SqlClient; 9 10 namespace Ado.netstart_1 11 { 12 class Program 13 {

快速生成较大文本文档的两种方法

在学习用FTP发送文件的过程中,需要用到一个比较大的文件进行传输测试.因此百度了一下如何生成指定大小文件的方法,发现在WINDOWS下有两种方法比较实用,记录如下: 第一种方法: 在运行窗口中输入CMD命令回车,进入命令行模式. 在此界面下输入:"fsutil file creatnew test.txt 1024"即可产生一个占用空间为1024字节,名为test.txt的文本. 命令中1024即为该文件占用空间大小,可以任意指定.比如输入1048576就可以产生一个1M大小的文件.当