Node.js ncp | fs.readdir | недостающие файлы | использование обратного вызова

Я пытался скопировать много файлов в папку с помощью "ncp", но каждый раз, когда я проверяю, скопированы ли файлы, не все из них есть. Всегда какие-то файлы отсутствуют.

Я пытался использовать fs.readdir, чтобы проверить, есть ли все файлы, но fs дает тот же результат, что некоторые файлы отсутствуют

мой код ncp

ncp(path.join(req.body.uploadPath,req.body.packageName,resourceDirectoryName), path.join(req.body.uploadPath,req.body.packageName),  (err) => {
    if (err) {
     //devmode report
     devMode.report('**error** '+err); 
    }
})

мой код fs

fs.readdir(path.join(req.body.uploadPath,req.body.packageName,resourceDirectoryName), (err, files)=>{
              console.info('####', files)
})

И это результат fs.readdir

Node.js ncp | fs.readdir | недостающие файлы | использование обратного вызова

Это папка со всеми файлами, которые я хочу скопировать

Node.js ncp | fs.readdir | недостающие файлы | использование обратного вызова

Это список файлов, которые он не копировал

Node.js ncp | fs.readdir | недостающие файлы | использование обратного вызова

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
437
1

Ответы 1

  • ПОДСКАЗКА 1:

    Check the order reported on your fs.readdir

  • ПОДСКАЗКА 2:

    Now, as it´s alphabetical order, look for the next ocurrence in your list (alphabetically)

  • ПОДСКАЗКА 3:

    Check for special characters on it´s name.

  • ПОДСКАЗКА 4 - ПРОВЕРЬТЕ ВОЗМОЖНОЕ РЕШЕНИЕ *

    As you can see, there is a space on the name of `new dictionary.json". Remove the spaces on this name and try again.

  • ПОДСКАЗКА 5 - Измените свой звонок и добавьте StopOnError

Add an StopOnError option to show if it stops there and why

ncp ( 
  path.join(req.body.uploadPath, req.body.packageName,   resourceDirectoryName),
  path.join(req.body.uploadPath,req.body.packageName), 
  {stopOnErr: true},
  (err) => {
        if (err) 
        {
          return console.error(err);
        }
      console.info("ok");
   }
)

РЕШЕНИЕ

After dealing with this for a little of time, the problem was located: The user was executing the fs.readdir right after the execution of NCP. As NCP is asyncronous, fs.readdir was not reading the whole bunch of copied files, as they were still not copied.

Then, just a delay before fs.readdir was the solution to see all of them. Not a Spaces or special characters thing.

НАКОНЕЦ РЕАЛЬНОЕ РЕШЕНИЕ

As async programming has a first-day-of-school where everybody learns how to deal with callbacks, there is an example to deal with callbacks, and solve the question.

var ncp = require('ncp').ncp;
var fs = require('fs');


ncp.limit = 16;
var source = "dir1"
var destination = "dir2"
console.info('Starting');
console.info(new Date().toISOString());

ncp(source, destination, mycallback );

function mycallback(err)
{
 //here we are inside a callback declared in an outer function
 if (err) {
   return console.info(err);
 }
 console.info('done!');
 console.info(new Date().toISOString());
 fs.readdir(destination, function (err, files){
            console.info("Files Copied to Dir2 "+ files.length);
            //here we are inside fs.readdir callback
            copyTwo();
              });
 //as fs.readdir is also async, I cannot execute copyTwo() here, and I must execute inside fs.reddir callback
}


function copyTwo()
{
console.info('Starting CopyTwo');
console.info(new Date().toISOString());
source = "dir2"
destination = "dir3"
  //This function uses an embedded callback
  ncp(source, destination, function (err)
  {
   // here we are inside the function declared (with-no-name) to use directly asembedded  callback
   if (err) {
     return console.info(err);
   }
   console.info('done!');
   console.info(new Date().toISOString());
   fs.readdir(destination, function (err, files){
              console.info("Files Copied to Dir3 "+ files.length);
                });
  });
}




[admin-sp@localhost pruebaApp]$ ls dir1 | wc -l
7777
[admin-sp@localhost pruebaApp]$ ls dir2 | wc -l
0
[admin-sp@localhost pruebaApp]$ ls dir3 | wc -l
0
[admin-sp@localhost pruebaApp]$ node index.js
Starting
2018-05-01T00:55:50.683Z
done!
2018-05-01T00:55:57.063Z
Files Copied to Dir2 7777
Starting CopyTwo
2018-05-01T00:55:57.069Z
done!
2018-05-01T00:56:03.030Z
Files Copied to Dir3 7777
[admin-sp@localhost pruebaApp]$

Я пробовал это, но дал мне "ОК" на консоли, и та же проблема - существует какой-то файл, который не скопирован

Mahmoud Niypoo 25.04.2018 13:20

Вы пытались удалить место на new dictionary.json, например, переименовав его в new_dictionary.json?

Alejandro Teixeira Muñoz 25.04.2018 14:31

нет, я не знал, потому что обычно я не знаю имена файлов в папке, я сразу после этой проблемы открываю папку и проверяю имя файлов

Mahmoud Niypoo 25.04.2018 14:33

Здесь также говорят, что вам нужно имя файла по назначению. Может быть, это связано с пробелом в имени файла ..? stackoverflow.com/a/38639253/3617531

Alejandro Teixeira Muñoz 25.04.2018 14:37

Я не предполагаю, что из-за того, что есть файл также sw.js, в нем нет места и он не копируется

Mahmoud Niypoo 25.04.2018 14:39

stackoverflow.com/a/38639253/3617531 в этой теме вопроса он копирует один файл, имя которого он уже знает, но я копирую всю папку

Mahmoud Niypoo 25.04.2018 14:42

Вы это проверили? Это важный момент. Если вы думаете, что вам это не нужно, вам не следует просить о помощи ...

Alejandro Teixeira Muñoz 25.04.2018 15:26

сэр, вы видели этот img "i.stack.imgur.com/uWGSH.png" это список файлов, которые npc и fs не могут прочитать и скопировать, это не случай пробела в имени, это что-то еще

Mahmoud Niypoo 25.04.2018 15:37

хорошо, и ... догадаешься, почему именно следующие после «new dictionary.json» ????

Alejandro Teixeira Muñoz 25.04.2018 15:59

я не знаю почему, но я пробую это в Linux и fs.reddir ловит эти файлы ['.DS_Store', 'appmanifest.json', 'box2d.asm.js', 'c2runtime.js', 'data.js ',' data.json ',' game.html ',' icon.png ',' icons ',' images ',' media ',' new dictionary.json '], но файлы в изображении fs не могут прочтите почему !! я не знаю

Mahmoud Niypoo 25.04.2018 16:15

@MahmoudNiypoo Я говорил вам: файлы ПЕРЕД файлом с пробелом в имени копируются. Файлы ПОСЛЕ файла с пробелом в имени НЕ КОПИРУЮТСЯ. Это показывает, по крайней мере, четкую связь между проблемой, о которой вы сообщаете, и этим файлом.. .. Если вы все еще думаете, что нет никакой связи ... Я не понимаю, в чем, по вашему мнению, проблема ....

Alejandro Teixeira Muñoz 25.04.2018 17:01

Я сделал то, что вы сказали, и это работает, но все же некоторые файлы не копируются !! я не знаю, почему я проверяю все имена файлов, чтобы удалить пробел или просто, но не найдено, как вы думаете?

Mahmoud Niypoo 25.04.2018 19:01

Позвольте нам продолжить обсуждение в чате.

Alejandro Teixeira Muñoz 25.04.2018 19:01

спасибо большое, что вдохновили меня, я выясняю, в чем проблема, это не место, я читаю файлы, прежде чем писать их вообще, я задерживаю этап чтения, и да, я ловлю все файлы

Mahmoud Niypoo 26.04.2018 12:32

:) Я говорил тебе!!! Это был такой экстрасенс. Работать с асинхронным кодом не так просто, как ожидалось !! :)

Alejandro Teixeira Muñoz 26.04.2018 16:00

:( Я не обращал внимания на асинхронную причину, потому что я использовал обратный вызов из функции, поэтому я думаю, что это сделано, и я готов обработать этот обратный вызов, как я могу избежать этой ошибки, связанной с асинхронным

Mahmoud Niypoo 29.04.2018 15:41

добавлен ответ об обработке обратного вызова !! :) Надеюсь, поможет!

Alejandro Teixeira Muñoz 01.05.2018 03:26

Другие вопросы по теме