【问题标题】:c programming copying filesc编程复制文件
【发布时间】:2010-12-10 14:52:10
【问题描述】:

创建用户输入的文件副本的复制程序几乎没有问题。我决定不使用 (size_t) 结构,而是只分配 (int) 和 (char) 类型变量,因此我知道要读取()的字节的确切值。即我知道从文件开始并读取 4 个字节(int)以获取文件名的长度值,我在下一次读取()中将其用作大小

所以,当我写(复制文件完全相同的名称)用户输入文件到输出文件(复制文件)时,我用长字符串写它,显然没有空格只是为了让它在这里可读,

文件名大小文件名文件内容大小文件内容 即 10 myfile.txt 5 你好

因此,当我开始读取该数据时,我使用 lseek() 从文件开头开始,我知道前 4 个字节是 (int),它是文件名的长度,所以我使用 read 函数将其放入 value int namelen 中。

我的问题是我想使用读取的文件名大小(前 4 个字节)的值来声明我的数组以存储具有正确长度的文件名。如何将此数组放入 read() 以便读取将值存储在指定的 char 数组中,请参见下文

int namelen; //value read from first 4 bytes of file lenght of filename to go in nxt read()
char filename[namelen]; 
read(fd, filename[namelen], namelen);//filename should have 'myfile.txt' if user entered that filename

所以我的问题是,一旦我从文件中读取了前 4 个字节,给了我存储在 namelen 中的文件名长度,然后我想读取 namelen 字节数来给我原始文件的文件名,这样我就可以在目录中创建复制的文件?

谢谢

【问题讨论】:

  • 发布整个“复制”功能(以及引入逻辑/文件描述符/等)。看起来您的假设有些离谱(例如,为什么您认为文件的前 4 个字节包含长度?)
  • "为什么你认为文件的前 4 个字节包含例如长度?"因为他是我首先将其写入文件的人;)
  • 希望您的程序永远不会在以不同方式存储整数的机器上使用。 32 位与 64 位编译将打破这一点(这就是为什么有 size_t)。但是 size_t 不能解决大端与小端的问题。
  • 通过显示实际代码来解释比尝试用语言表达更清楚。在进行语言表达时,会引入很多变量,考虑到读者的不同背景,这些变量可能难以以明确的方式进行解释。

标签: c file copy io


【解决方案1】:
int namelen; //value read from first 4 bytes of file lenght of filename to go in nxt read()
char* filename = new char[namelen+1]; 
read(fd, filename, namelen);
filename[namelen]=0; // Just to keep readed buffer c-string compatible
do something with filename
delete[] filename;

【讨论】:

    【解决方案2】:

    在您之前的问题here 中,您没有投票赞成或接受任何一个答案。不过,您似乎确实使用了这些答案。

    如果您愿意通过支持他们的回答并接受您认为最有帮助的回答来对他们之前的帮助表示一点感谢,那么回答上述问题的人可能会倾向于在这里为您提供帮助。

    【讨论】:

    • 这是一个很好的评论。虽然答案很糟糕。
    • 对不起,我是新手,我不知道如何在同一个线程中问 2 个问题。我会标记答案,对不起这个人
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-04
    • 1970-01-01
    • 1970-01-01
    • 2014-01-15
    • 1970-01-01
    • 2017-09-02
    • 1970-01-01
    相关资源
    最近更新 更多