【问题标题】:Reading multiple files, and keeping a set of data for each file.读取多个文件,并为每个文件保留一组数据。
【发布时间】:2013-05-14 12:23:02
【问题描述】:

我想读取一个文件并将其标题保存在一个变量中,这样当我重写(覆盖)该文件时,我可以粘贴标题并继续打印修改后的文件的其余部分。就我而言,标题没有改变,所以我可以打印出来。这是我在课堂上的代码:

.
.
.
static char headerline[1024];

static int read(const char* filename){
fget(var,...;
    for (int i=0; i<1024; ++i){
        headerline[i] = var[i];
    }    
.
.
.
}

int write(filename){
fprintf(filename, headerline);
//printing rest of file
.
.
.
}

代码在读取文件时成功打印了它保存的行。但是,我的问题是它保存了上次读取的文件的标题。因此,如果我打开了两个文件并且我想保存第一个文件,那么第二个文件的标题将写入第一个文件。我怎样才能避免这种情况?如果静态地图是一种解决方案,那究竟是什么?

其次,打印整个标题(5-8 行)而不是像我现在那样只打印一行的最佳方法是什么。

【问题讨论】:

  • 作为生活中的一般规则,如果有人建议“X”作为您问题的解决方案,而您不知道“X”是什么,您应该问那个人“X 是什么?” .
  • 如果可以,我早就拥有了。考虑到他已经死了。
  • @detraveller:对您的损失深表歉意,但是当他们提出答案时,请尝试提出问题。在不理解对方所说的内容的情况下退出对话绝不是一件好事。
  • 对我来说,这些词只是意味着一个静态数据成员 (msdn.microsoft.com/en-us/library/b1b5y48f.aspx),它恰好是 map 类型,即 std::map (sgi.com/tech/stl/Map.html)。换句话说,它们有两种不同的含义,我可以将它们并列在一个表达式中,这样第一个含义就符合第二个含义:“静态地图”、“加拿大建筑师”、“红苹果”。
  • 创建一个代表文件的类,然后将标题存储在它所属的实例中。

标签: c++ static


【解决方案1】:

所以,需要解决的问题是您正在读取多个文件,并且希望为每个文件保留一组数据。

有很多方法可以解决这个问题。其中之一是将filenameheader 连接起来。正如评论中所建议的那样,使用std::map&lt;std::string, std::string&gt; 将是一种方法。

static std::map<std::string, std::string> headermap;



static int read(const char* filename){
static char headerline;
fget(var,...;
    for (int i=0; i<1024; ++i){
        headerline[i] = var[i];
    }   
    headermap[std::string(filename)] = std::string(headerline);

...

int write(filename){
  const char *headerline = headermap[std::string(filename)].c_str();
 fprintf(filename, headerline);   
// Note the printf is based on the above post - it's wrong, 
// but I'm not sure what your actual code does. 

【讨论】:

  • 谢谢。所以关键应该是我正在阅读的文件的名称?就我而言,文件的名称是File* fp = ...。如何将FILE*类型的名称转换为string
  • 我想你几乎可以使用任何独特的东西(当然你需要使用适当的类型 - 因为你的示例代码说“const char *filename”,我用过。一个@987654328 @ 是唯一的,只要你不关闭其他的。你可能需要稍微重构你的代码来实现你想要的。
【解决方案2】:

你应该为不同的文件使用不同的头变量。

【讨论】:

    猜你喜欢
    • 2020-03-16
    • 2020-04-30
    • 2013-03-06
    • 2020-01-10
    • 1970-01-01
    • 1970-01-01
    • 2020-09-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多