1 bool copyFile(const String& source, const String& target)
3 bool bRet = false; int iRet , iRead , size , iWrite;
4 FILE* fS = NULL , *fD = NULL;
5 char fileName[25] ={0};
6 char buf[100] ="";
7 char cmd[125] ="";
8 char* buffer = NULL;
9 int iPos = target.reverseFind('/');
11 char* src = (char*)malloc(256*sizeof(char));
12 int src_len = strlen((char *)source.ascii().data());
13 memcpy(src, (char *)source.ascii().data(), src_len);
14 src[src_len] = '\0';
16 char* des = (char*)malloc(256*sizeof(char));
17 int des_len = strlen((char *)target.ascii().data());
18 memcpy(des, (char *)target.ascii().data(), des_len);
19 des[des_len] = '\0';
21 if (iPos+1 != des_len)
22 {
23 strcat(des,"/");
26 iRet = access(src, F_OK);
27 if (iRet)
28 {
29 return false; //源文件不存在.
30 }
31 fS = fopen(src, "r");
32 if (fS == NULL)
33 {
34 return false; //源文件打开失败
35 }
37 DIR* dir;
38 if((dir = opendir(des)) == NULL)
39 {
40 goto finish;
41 }
42 // strncpy(fileName,src+12,strlen(src) -12);//"/mnt/sdcard/"
43 strncpy(buf,des,strlen(des));
44 strcat(buf,fileName);
46 sprintf(cmd, "touch %s",buf);
47 system(cmd);//创建目标文件
49 fD = fopen(buf, "w+");
50 if (fD == NULL)
51 {
52 goto finish;
53 }
54 fseek(fS, 0, SEEK_END);
55 size = ftell(fS); //文件首尾偏移的字节数
56 fseek(fS, 0, SEEK_SET); //把fp指针移动到文件开头
57 buffer = (char*) calloc(1, size + 1);
58 if (!buffer)
59 {
60 goto finish;
61 }
62 iRead = fread(buffer, 1, size, fS); //成功读取的元素个数
63 if (iRead != size)
64 {
65 goto finish;
66 }
67 iWrite = fwrite((void*)buffer, 1, size, fD); //写入目标文件
68 if (iWrite != size)
69 {
70 goto finish;
71 }
72 bRet = true;
73 finish:
74 if (fS)
75 fclose(fS);
76 if (fD)
77 fclose(fD);
78 if (buffer)
79 free(buffer);
80 free(src);
81 src = NULL;
82 free(des);
83 des = NULL;
84 closedir(dir);
85 return bRet;
2、移动文件
1 bool moveFile(const String& source, const String& target)
3 bool bRet = false;
4 int iRet , iRead , size , iWrite ;
5 FILE* fS = NULL , *fD = NULL;
6 char fileName[25] ={0};
7 char buf[100] ="";
8 char cmd[125] ="";
9 char* buffer = NULL;
10 int iPos = target.reverseFind('/');
12 char* src = (char*)malloc(256*sizeof(char));
13 int src_len = strlen((char *)source.ascii().data());
14 memcpy(src, (char *)source.ascii().data(), src_len);
15 src[src_len] = '\0';
17 char* des = (char*)malloc(256*sizeof(char));
18 int des_len = strlen((char *)target.ascii().data());
19 memcpy(des, (char *)target.ascii().data(), des_len);
20 des[des_len] = '\0';
21 if (iPos+1 != des_len)
22 {
23 strcat(des,"/");
24 }
26 iRet = access(src, F_OK);
27 if (iRet)
28 {
29 return false; //源文件不存在
30 }
31 fS = fopen(src, "r");
32 if (fS == NULL)
33 {
34 return false; // 源文件打开失败
35 }
37 DIR* dir;
38 if((dir = opendir(des)) == NULL)
39 {
40 goto finish; //目标路径不存在
41 }
43 // strncpy(fileName,src+12,strlen(src) -12);//"/mnt/sdcard/"
44 strncpy(buf,des,strlen(des));
45 strcat(buf,fileName);
46 LOGD("fileName= [%s] buf=%s",fileName,buf);
48 sprintf(cmd, "touch %s",buf);
49 system(cmd);
52 fD = fopen(buf, "w+");
53 if (fD == NULL)
54 {
55 goto finish;
56 }
58 fseek(fS, 0, SEEK_END);
59 size = ftell(fS);
60 fseek(fS, 0, SEEK_SET);
61 buffer = (char*) calloc(1, size + 1);
63 if (!buffer)
64 {
65 goto finish;
66 }
67 iRead = fread(buffer, 1, size, fS);
68 if (iRead != size)
69 {
70 goto finish;
71 }
72 iWrite = fwrite((void*)buffer, 1, size, fD);
73 if (iWrite != size)
74 {
75 goto finish;
76 }
78 if(remove(src)==0) //删除源文件
79 {
80 bRet = true;
81 }
83 finish:
84 if (fS)
85 fclose(fS);
86 if (fD)
87 fclose(fD);
88 if (buffer)
89 free(buffer);
90 free(src);
91 src = NULL;
92 free(des);
93 des = NULL;
94 closedir(dir);
95 return bRet;
3、删除文件
1 bool deleteFile(const String& path)
3 bool bRet = false;
4 char* src = (char *)path.utf8().data();
5 int iRet;
6 iRet = access(src, F_OK);
7 if (iRet) //文件不存在
10 else
11 {
12 if(remove(src)==0)
13 {
14 bRet = true;
15 }
16 else //移除文件失败
17 {
18 }
19 }
20 return bRet;
4、判断文件是否存在
1 bool existLocalFile(const String& path)
3 bool bRet = false;
4 int iRet;
5 char* src = (char *)path.utf8().data();
6 iRet = access(src,F_OK);
7 if (iRet) //源文件不存在
10 else
11 {
12 bRet = true;
13 }
14 return bRet;
5、复制文件夹
1 bool copyDirectory(const String& source, const String& target)
3 bool bRet = false;
5 char* src = (char*)malloc(256*sizeof(char));
6 int src_len = strlen((char *)source.ascii().data());
7 memcpy(src, (char *)source.ascii().data(), src_len);
8 src[src_len] = '\0';
10 char* dest = (char*)malloc(256*sizeof(char));
11 int des_len = strlen((char *)target.ascii().data());
12 memcpy(dest, (char *)target.ascii().data(), des_len);
13 dest[des_len] = '\0';
15 DIR *dirp = NULL;
16 int iRet;
17 iRet = access(src, F_OK);
18 if (iRet)
19 {
20 return false; //源文件不存在
21 }
23 //1.open the dir
24 if(NULL ==(dirp = opendir(src)))
25 {
26 return false;
27 }
29 struct dirent *entp = NULL;
30 //2.read the dir
31 while(NULL != (entp = readdir(dirp)))
32 {
33 if( 0 == (strcmp(entp->d_name,"..")) || 0 == (strcmp(entp->d_name, ".")))
34 {
35 continue;
36 }
38 char src_buf[100] = "";
39 char dest_buf[100] = "";
41 sprintf(src_buf, "%s/%s", src, entp->d_name);
42 sprintf(dest_buf, "%s/%s", dest, entp->d_name);
44 struct stat src_stat;
46 if( stat(src_buf,&src_stat) )
47 {
48 goto finish; //get stat failed
49 }
50 if( S_ISREG(src_stat.st_mode) )
51 {
52 int iRet , iRead , size , iWrite;
53 FILE* fS = NULL , *fD = NULL;
54 char* buffer = NULL;
55 iRet = access(src_buf, F_OK);
56 if (iRet)
57 {
58 return false;
59 }
60 fS = fopen(src_buf, "r");
61 if (fS == NULL)
62 {
63 return false;
64 }
65 fD = fopen(dest_buf, "w+");
66 if (fD == NULL)
67 {
68 goto finish;
69 }
71 fseek(fS, 0, SEEK_END);
72 size = ftell(fS);
73 fseek(fS, 0, SEEK_SET);
74 buffer = (char*) calloc(1, size + 1);
75 if (!buffer)
76 {
77 goto finish;
78 }
80 iRead = fread(buffer, 1, size, fS);
81 if (iRead != size)
82 {
83 goto finish;
84 }
86 iWrite = fwrite((void*)buffer, 1, size, fD);
87 if (iWrite != size)
88 {
89 goto finish;
90 }
91 if (fS)
92 fclose(fS);
93 if (fD)
94 fclose(fD);
95 if (buffer)
96 free(buffer);
97 }
98 else if( S_ISDIR(src_stat.st_mode) )
99 {
100 if( -1 == mkdir(dest_buf, src_stat.st_mode) )
101 {
102 goto finish;
103 }
104 copyDirectory(src_buf, dest_buf); //if subdir, recursive call itself
105 }
106 }
107 bRet = true;
109 finish:
110 if (dirp)
111 closedir(dirp);
112 free(src);
113 src = NULL;
114 free(dest);
115 dest = NULL;
116 return bRet;
117 }
6、移动文件夹
1 bool moveDirectory(const String& source, const String& target)
3 bool bRet = false;
5 char* dest = (char*)malloc(256*sizeof(char));
6 int des_len = strlen((char *)target.ascii().data());
7 memcpy(dest, (char *)target.ascii().data(), des_len);
8 dest[des_len] = '\0';
10 char* src = (char*)malloc(256*sizeof(char));
11 int src_len = strlen((char *)source.ascii().data());
12 memcpy(src, (char *)source.ascii().data(), src_len);
13 src[src_len] = '\0';
15 int iRet;
16 iRet = access(src, F_OK);
17 if (iRet)
18 {
19 return false;
20 }
22 if(copyDirectory(src,dest))
23 {
24 if (deleteDirectory(src))
25 {
26 bRet =true;
27 }
28 else
29 {
30 }
31 }
32 else
33 {
34 }
35 return bRet;
7、删除文件夹
1 bool deleteDirectory(const String& path)
3 char* src = (char*)malloc(256*sizeof(char));
4 int src_len = strlen((char *)path.ascii().data());
5 memcpy(src, (char *)path.ascii().data(), src_len);
6 src[src_len] = '\0';
8 DIR * dir;
9 int iRet;
10 bool bRet = false;
11 iRet = access(src, F_OK);
12 if (iRet)
13 {
14 return false;
15 }
16 else
17 {
18 if((dir = opendir(src)) ==NULL)
19 {
20 return false;
21 }
22 struct dirent *entp = NULL;
23 while(NULL != (entp = readdir(dir)))
24 {
25 if( 0 == (strcmp(entp->d_name,"..")) || 0 == (strcmp(entp->d_name, ".")))
26 {
27 continue;
28 }
29 char src_buf[100] = "";
30 sprintf(src_buf, "%s/%s", src, entp->d_name);
31 LOGD("src_buf = %s",src_buf);
32 struct stat src_stat;
33 if( stat(src_buf,&src_stat) )
34 {
35 goto finish;
36 }
38 if( S_ISREG(src_stat.st_mode) )
39 {
40 deleteFile(src_buf);
41 }
43 else if( S_ISDIR(src_stat.st_mode) )
44 {
45 deleteDirectory(src_buf);
46 }
48 }
49 if(remove(src)==0)
50 {
51 bRet = true;
52 }
53 finish:
54 if (dir)
55 closedir(dir);
56 free(src);
57 src = NULL;
58 return bRet;
59 }