2015-09-08 2 views
0

У меня должно быть требование, из которого мне нужно удалить папку Backup, и мне нужно переименовать процессор как резервную копию, и мне нужно снова создать папку с процессором, и вам нужно отправить ответ на пользователь. Для этого я использую код ниже.EPERM при переименовании каталога в узле js randomly

fsExtra.remove('app/Backup', function(err, result) { 
    if(err){ 
     console.log("Err in removing Backup folder "+JSON.stringify(err)); 
    }else{  
     fs.rename('app/Processor','app/Backup', function(err, result) { 
      if(err){ 
       console.log("Err in renaming folder "+JSON.stringify(err)); 
      }else{ 
       fs.mkdir('app/Processor', function(err, result) { 
        if(err){ 
         console.log("Err in mk Backup folder "+JSON.stringify(err)); 
        }else{ 
         res.send("success"); 
        } 
       }); 
      } 
     }); 
    } 
}); 

Много раз его работы, как ожидается, но в один момент он дает ошибку ниже

Err in renaming folder {"errno":50,"code":"EPERM","path":"C:\\Work Bench\\WorkSpace\\Sprint22\\project_name\\app\\Backup"} 

Я не знаю, что мне не хватает его происходит случайным образом.

Спасибо за это.

ответ

0

Я наблюдаю ту же проблему с синхронными командами на Windows fs.removeSync ('folder'); fs.mkdirsSync ('папка'); Ошибка EPERM, по-видимому, возникает, когда открывается экземпляр проводника Windows, и «папка» отображается в любом месте в проводнике. До сих пор я не нашел решения, кроме закрытия проводника (и ожидания несколько секунд), что очень раздражает ...

0

Вы не одиноки, я тоже нашел эту проблему, когда тестирую свой код в жасмине, и я не смогли воспроизвести его более кратким образом. Я бы сказал, что это происходит с вероятностью 1%, это потребовало много времени, чтобы изолировать его :-)

Это не связано с обозревателем окна в моем случае. Сразу же после попытки ошибки срабатывает! Вот мой код приложения, чтобы обойти эту проблему:

try { 
    fs.renameSync(oldDir, newDir); 
} 
catch (e) { 
    fs.renameSync(oldDir, newDir); 
} 

Это так просто, что простота заставляет меня думать, что это ошибка в узле.

Возможно, у меня такая же проблема, когда rmdirSync также выдал ложную ошибку, но поскольку она встречается между взаимозависимыми обратными вызовами async, в отличие от проблемы renameSync, я не буду так утвердительной.

Я использую узел v5.3.0

0

Я прочитал ответ на родственные проблемы in this very nice post. Короче говоря, документ Node дает вам приблизительное приближение (т. Е. Лежит ;-)), когда в нем говорится, что некоторые действия файловой системы выполняются либо синхронно, либо асинхронно. В зависимости от используемого API вы должны подождать немного, прежде чем это будет эффективно сделано.

Информация, представленная там, очень хорошо объясняет «случайные ошибки» в моем коде, в том числе проблемы EPERM, как вы описали, и почему повторная «немедленная» операция, которая только что сработала (в большинстве случаев по крайней мере :-))