【发布时间】:2013-11-14 01:31:46
【问题描述】:
我正在尝试从文件中读取内容,将其存储在字符串中,获取字符串长度,写入字符串长度,然后将文件内容写入另一个文件。实现存档 # 内容,其中 # 是内容的长度。
到目前为止,这会写出一些奇怪的字符,并且会额外写出内容行。
如果内容超过 1024,我需要继续阅读,所以我假设我写 if len == 1024 然后再次阅读并将其连接到数据。我目前还没有实现它,但想在我开始使文件更大之前让它工作。
int file2p = open(curFilePath, O_RDONLY, 0);
if(file2p == -1){
printf("File open error.");
exit(1);
}
char buffer[1024];
int len;
int dataLen;
char data[1024];
while((len = read(file2p, buffer, 1024)) != 0){
if(len == -1){
printf("File open error.\n");
exit(1);
}
strcat(data, strdup(buffer));
printf("data: %s", data);
}
dataLen = strlen(data);
int lenLen = strlen(&dataLen);
write(filep, &dataLen, lenLen);
write(filep, ">", 1);
write(filep, data, dataLen);
//free(data);
close(file2p);
【问题讨论】:
-
strlen(&dataLen)是不可以的。相反,您应该使用sizeof(int) -
我假设这些是文本文件,否则请改用
sizeof() -
对字符串也使用 sizeof?我正在测试 txt 文件,但它们也可以是二进制文件。实际上,它们只需要成为一个文件即可。该程序查看目录中的所有文件,并将每个文件的名称、权限和内容归档到一个文件中。然后我必须从中重新创建文件。
-
如果你的文件可以是二进制的,那么
strlen(data)也不好,因为二进制数据可以包含'\0'字符,这不会给你内容的真实长度,相反你需要保留跟踪读取的字符数,因此在 while 循环中添加一行dataLen += len;并删除dataLen = strlen(data);行 -
@JoeDF 我不认为
sizeof(data)会起作用,因为我相信它只会返回指针的大小而不是已读取内容量的大小。