我编写了一个c代码,如下所示,用于复制文件。它确实适用于 unicode
文件(例如 exe、rar),我使用 char
数据类型数组来复制其中的文件“ block ”。我知道,char data-type
只能存储 1
字节作为扩展 ASCII
标准。
在 fread()
函数中,由于复制 的 block ,因此将
文件(buffer[buflen]
变量用作 char
数组exe100
字节),然后将 buffer[buflen]
复制到另一个文件中。一 block unicode
字符怎么可能存储在 char
中?为什么这段代码适用于 unicode
文件确实没有任何问题?
copyFile
函数:
void copyFile(const char *src, const char *dst)
{
const int buflen = 100;
char buffer[buflen];
long fileSize, curFileSize, offset = 0;
FILE *r, *w;
r = fopen(src, "r+b");
w = fopen(dst, "w+b");
fseek(r, 0, SEEK_END);
fileSize = ftell(r);
fseek(r, 0, SEEK_SET);
while(fileSize - (curFileSize = ftell(r)) >= buflen)
{
fseek(r, offset * buflen, SEEK_SET);
fread(&buffer, sizeof(buffer), 1, r);
fwrite(&buffer, sizeof(buffer), 1, w);
offset++;
}
if ((fileSize - curFileSize) != 0)
{
fseek(r, (offset - 1) + (curFileSize), SEEK_SET);
fread(&buffer, fileSize - curFileSize, 1, r);
fwrite(&buffer, fileSize - curFileSize, 1, w);
}
fclose(w);
fclose(r);
}
入口点
部分:
int main()
{
copyFile("e:/1.exe", "e:/2.exe");
return 0;
}
使用 char
data-type
或 struct
(包含 char
)的原因是什么fread
和 fwrite
函数?
感谢大家对我的帮助。
最佳答案
任何文件,无论编码如何,都只是一个字节序列。 char
类型可以存储任何字节,因此您只需逐字节复制文件即可。 (char
在 C 和 C++ 中用作字符类型和能够保存字节的数字类型。这可能会令人困惑,但两种用法都是有效的。)
fread
和 fwrite
是根据 char
指定的,因为它们读取和写入字节。
关于将 unicode 文件的包含内容复制到 c 中的 char 数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37376608/