[Programming] Hỏi thuật toán copy file |
07/11/2007 07:17:21 (+0700) | #1 | 95809 |
|
zThienLongz
Member
|
0 |
|
|
Joined: 29/08/2006 10:09:05
Messages: 104
Location: World
Offline
|
|
Mình thấy trong Windows và linux đề có commands copy file. Tiện học về vào ra tệp mình định viết 1 đoạn mã để copy 1 file thanh nhìu file nhưng mà khổng thể nào viết nổi bạn nào giúp mình với.
Giả sử mình có 1 file gốc không biết nội dung bên trong nó là gì ,yêu cầu: bạn hãy tạo ra những file copy của file đó
Thanks..... |
|
|
|
|
[Question] Hỏi thuật toán copy file |
07/11/2007 08:33:11 (+0700) | #2 | 95829 |
FaL
Moderator
|
Joined: 14/04/2006 09:31:18
Messages: 1232
Offline
|
|
zThienLongz wrote:
Mình thấy trong Windows và linux đề có commands copy file. Tiện học về vào ra tệp mình định viết 1 đoạn mã để copy 1 file thanh nhìu file nhưng mà khổng thể nào viết nổi bạn nào giúp mình với.
Giả sử mình có 1 file gốc không biết nội dung bên trong nó là gì ,yêu cầu: bạn hãy tạo ra những file copy của file đó
Thanks.....
Bồ thử copy từng byte của file đó xem!
FaL |
|
Hãy giữ một trái tim nóng và một cái đầu lạnh |
|
|
|
[Question] Hỏi thuật toán copy file |
07/11/2007 13:04:29 (+0700) | #3 | 95902 |
|
K4i
Moderator
|
Joined: 18/04/2006 09:32:13
Messages: 635
Location: Underground
Offline
|
|
FaL wrote:
zThienLongz wrote:
Mình thấy trong Windows và linux đề có commands copy file. Tiện học về vào ra tệp mình định viết 1 đoạn mã để copy 1 file thanh nhìu file nhưng mà khổng thể nào viết nổi bạn nào giúp mình với.
Giả sử mình có 1 file gốc không biết nội dung bên trong nó là gì ,yêu cầu: bạn hãy tạo ra những file copy của file đó
Thanks.....
Bồ thử copy từng byte của file đó xem!
FaL
Chính xác hơn là copy một khối byte có độ lớn xác định vì làm việc với từng byte một trong bài toán này là không cần thiết |
|
Sống là để không chết chứ không phải để trở thành anh hùng |
|
|
|
[Question] Re: Hỏi thuật toán copy file |
07/11/2007 13:33:11 (+0700) | #4 | 95909 |
TQN
Elite Member
|
0 |
|
|
Joined: 29/06/2006 22:28:01
Messages: 888
Location: Biết làm chi ?
Offline
|
|
Cho cậu 3 đoạn code để copy file: dùng C RTL (có thể port qua Linux được), dùng hàm Windows API và dùng CopyFile Windows API:
Code:
// Code 1: dùng C RTL File IO functions
#include <stdio.h>
#include <errno.h>
#define BUF_SIZE 256
int main (int argc, char *argv [])
{
FILE *in_file, *out_file;
char rec [BUF_SIZE];
size_t bytes_in, bytes_out;
if (argc != 3) {
printf ("Usage: cpC file1 file2\n");
return 1;
}
in_file = fopen (argv [1], "rb");
if (in_file == NULL) {
perror (argv [1]);
return 2;
}
out_file = fopen (argv [2], "wb");
if (out_file == NULL) {
perror (argv [2]);
return 3;
}
/* Process the input file a record at a time. */
while ((bytes_in = fread (rec, 1, BUF_SIZE, in_file)) > 0) {
bytes_out = fwrite (rec, 1, bytes_in, out_file);
if (bytes_out != bytes_in) {
perror ("Fatal write error.");
return 4;
}
}
fclose (in_file);
fclose (out_file);
return 0;
}
// Code 2: dùng Windows File IO API functions
#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, 0, NULL,
OPEN_EXISTING, 0, NULL);
if (hIn == INVALID_HANDLE_VALUE) {
printf ("Cannot open input file. Error: %x\n",
GetLastError ());
return 2;
}
hOut = CreateFile (argv [2], GENERIC_WRITE, 0, NULL,
CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
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;
}
// Code 3: Dùng Windows CopyFile API function
#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;
}
Nói trước là code trên không phải do tui viết à nhe, nó nằm trong 1 cuốn ebook trên máy tui. |
|
|
|
|
[Question] Re: Hỏi thuật toán copy file |
07/11/2007 14:51:55 (+0700) | #5 | 95927 |
FaL
Moderator
|
Joined: 14/04/2006 09:31:18
Messages: 1232
Offline
|
|
ThangCuEm wrote:
Cho cậu 3 đoạn code để copy file: dùng C RTL (có thể port qua Linux được), dùng hàm Windows API và dùng CopyFile Windows API:
Code:
// Code 1: dùng C RTL File IO functions
#include <stdio.h>
#include <errno.h>
#define BUF_SIZE 256
// Code 2: dùng Windows File IO API functions
// Code 3: Dùng Windows CopyFile API function
Em khoái đoạn code đầu tiên nhất, tuy nhiên em muốn hỏi thêm là vì sao define chính xác BUF_SIZE = 256? Ta hoàn tòan có thể define nó nhỏ hơn hoặc lớn hơn. Ở đây có gì cần lưu ý không anh?
FaL. |
|
Hãy giữ một trái tim nóng và một cái đầu lạnh |
|
|