【问题标题】:Open Sequential Files C++打开顺序文件 C++
【发布时间】:2013-07-05 14:14:58
【问题描述】:

我有一个文件夹,里面装满了这种格式的文件 FileName000.extension FileName001.extension 等。 我需要将它们全部打开并用 C++ 做一些事情。 我试过的是这样的:

for(int i=0; i<number_of_files; i++){
        char filename[64];
if(i<10){
        sprintf(filename, "/Path/To/File/FileName00%i.extension", i);
}
    if(i<100){
        sprintf(filename, "/Path/To/File/FileName0%i.extension", i);
}
else{
        sprintf(filename, "/Path/To/File/FileName%i.extension", i);
}
        ifstream infile ( filename );

//DO STUFF TO FILES HERE INSIDE THE FOR LOOP
}

由于某些原因,这似乎不起作用 任何帮助,将不胜感激。它是一个字符还是一个字符串并不重要,只要它可以工作。我使用 Xcode 作为 IDE,但该程序也必须在 Windows 上运行。

【问题讨论】:

标签: c++ file


【解决方案1】:

您可以使用sprintf(... "...%03d...", ...) 获取一致的 3 位数字。

【讨论】:

    【解决方案2】:

    如果你读了一篇好的reference,你会发现你根本不需要选择性部分:

    snprintf(filename, sizeof(filename), "/Path/To/File/FileName%03d.extension", i);
    

    格式代码中的3 告诉snprintf 使用三个字符作为字段宽度,前导0 告诉它对小于99 的值使用前导零。


    至于您的if 语句存在问题,您缺少else

    if (i < 10) { ... }
    else if (i < 100) { ... }
    else { ... }
    

    如果你想要 C++ 解决方案,那么你可以使用std::ostringstream:

    std::ostringstream os;
    os << "/Path/To/File/FileName" << std::setfill('0') << std::setw(3) << i << ".extension";
    
    ifstream file(os.str());
    

    【讨论】:

    • 难怪所有支持顺序输入的程序都使用相同的数字格式,我认为这只是一种模因,他们都编写了自己的实现......有没有人知道一个很好的参考C 标准库函数和特性?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-02
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    • 2011-12-21
    • 2011-05-16
    相关资源
    最近更新 更多