Как я проверяю, является ли файл регулярным файлом?

Вы можете сделать это, используя Reduce.

здесь мы используем team name в качестве ключевого свойства и, проверяя, находится ли он уже в выходном объекте, нажимаем score и course в свойстве раундов этого конкретного командного ключа, если нет, то мы создаем новый ключ.

const rounds = [
   {team: "Dropkick Murphies", score: 75, course: 17},
   {team: "Dropkick Murphies", score: 62, course: 24},
   {team: "Dropkick Murphies", score: 69, course: 26},
   {team: "Gigantic", score: 67, course: 26},
   {team: "Gigantic", score: 65, course: 17},
   {team: "Gigantic", score: 63, course: 24}
];

let op = rounds.reduce((output,current)=>{
  if(output[current.team]){
    output[current.team].rounds.push({
      score : current.score,
      course: current.score
    })} else {
      output[current.team] = {
        team: current.team,
        rounds: [{score:current.score, course:current.course}]
      }
    }
 return output 
},{})

console.log(Object.values(op))

5
задан Cacahuete Frito 9 July 2019 в 01:57
поделиться

4 ответа

Необходимо назвать статистику (2) на файле и затем использовать макрос S_ISREG на st_mode.

Что-то как (адаптированный из этого ответа):

#include <sys/stat.h>

struct stat sb;

if (stat(pathname, &sb) == 0 && S_ISREG(sb.st_mode))
{
    // file exists and it's a regular file
}
4
ответ дан 18 December 2019 в 05:40
поделиться

Можно использовать портативное устройство boost::filesystem (Стандартная библиотека C++, возможно, не сделала этого вплоть до недавнего введения станд.:: файловая система в C++ 17):

#include <boost/filesystem/path.hpp>
#include <boost/filesystem/operations.hpp>
#include <iostream>

int main() {
    using namespace boost::filesystem;

    path p("/bin/bash");
    if(is_regular_file(p)) {
        std::cout << "exists and is regular file" << std::endl;
    }
}
23
ответ дан 18 December 2019 в 05:40
поделиться

Спасибо всем за справку, я попробовал

while ((dirp = readdir(dp)) != NULL) { 
   if (!S_ISDIR(dirp->d_type)) { 
        ... 
        i++; 
   } 
} 

И это хорошо работает.=)

0
ответ дан 18 December 2019 в 05:40
поделиться

Сам C++ не имеет дело с файловыми системами, таким образом, нет никакого портативного пути на самом языке. Определенные для платформы примеры stat для *отклоняют (как уже отмечено Martin против Löwis) и GetFileAttributes для Windows.

Кроме того, если у Вас не аллергия на Повышение, там является довольно межплатформенным boost::filesystem.

3
ответ дан 18 December 2019 в 05:40
поделиться