ගොනුවක් හෝ නාමාවලියක් තිබේ නම් node.js භාවිතා කර සමමුහුර්තව පරීක්ෂා කරන්නේ කෙසේද ?
existsඅනවශ්ය ඇමතුම් ලබා ගනී.
ගොනුවක් හෝ නාමාවලියක් තිබේ නම් node.js භාවිතා කර සමමුහුර්තව පරීක්ෂා කරන්නේ කෙසේද ?
existsඅනවශ්ය ඇමතුම් ලබා ගනී.
Answers:
මෙම ප්රශ්නයට පිළිතුර වසර ගණනාවක් තිස්සේ වෙනස් වී ඇත. මෙම වත්මන් පිළිතුර කාලානුක්රමික පිළිවෙළකට නොව වසර පුරා විවිධ පිළිතුරු විසින් අනුගමනය, ඉහළ මෙතන:
ඔබට භාවිතා කළ හැකිය fs.existsSync():
const fs = require("fs"); // Or `import fs from "fs";` with ESM
if (fs.existsSync(path)) {
// Do something
}
එය වසර ගණනාවක් තිස්සේ අවලංගු කරන ලද නමුත් තවදුරටත් එසේ නොවේ. ලියකියවිලි වලින්:
fs.exists()අවලංගු කර ඇති නමුත්fs.existsSync()එසේ නොවන බව සලකන්න . (fs.exists()වෙනත් Node.js ඇමතුම් සඳහා නොගැලපෙන පරාමිතීන් පිළිගැනීමට ඇති ඇමතුම් ආපසු පරාමිතිය . ඇමතුමක් ලබාfs.existsSync()නොගනී.)
ඔබ විශේෂයෙන් සමමුහුර්ත චෙක්පතක් ඉල්ලා ඇත , නමුත් ඔබට ඒ වෙනුවට අසමමුහුර්ත චෙක්පතක් භාවිතා කළ හැකි නම් (සාමාන්යයෙන් I / O සමඟ හොඳම), fs.promises.accessඔබ asyncශ්රිත භාවිතා කරන්නේ නම් හෝ fs.access( අතහැර දැමූ බැවින් exists) :
තුළ සිටින asyncක්රියාව:
try {
await fs.promises.access("somefile");
// The check succeeded
} catch (error) {
// The check failed
}
හෝ ඇමතුමක් සමඟ:
fs.access("somefile", error => {
if (!error) {
// The check succeeded
} else {
// The check failed
}
});
කාලානුක්රමික පිළිවෙලින් historical තිහාසික පිළිතුරු මෙන්න:
stat/ statSyncහෝ lstat/ lstatSync)exists/ existsSync)exists/ / existsSyncහි ක්ෂයවීම සටහන් කරමින් , එබැවින් අපි බොහෝ විට stat/ statSyncහෝ lstat/ වෙත ආපසු යන්නෙමු lstatSync)fs.access(path, fs.F_OK, function(){})/ fs.accessSync(path, fs.F_OK), නමුත් ගොනුව / බහලුම නොපවතියි නම්, එය දෝෂයක් බව, සටහන්, මූඩ්ල් ලේඛන fs.statභාවිතා කිරීම නිර්දේශ fs.accessඔබ විවෘත තොරව පැවැත්ම සඳහා පරීක්ෂා කිරීමට අවශ්ය නම්)fs.exists() තවමත් අතහැර දමා ඇති නමුත් fs.existsSync()තවදුරටත් අවලංගු කර නොමැත. එබැවින් ඔබට දැන් එය ආරක්ෂිතව භාවිතා කළ හැකිය.ඔබට වස්තුවක් ලබා දෙන statSyncහෝ lstatSync( docs link ) භාවිතා කළ හැකිය . පොදුවේ ගත් කල, ශ්රිතයක සමමුහුර්ත අනුවාදයක් තිබේ නම්, එය අවසානයේ ඇති අසින්ක් අනුවාදයට සමාන නමක් ඇත . ඒ නිසා ඇති සමමුහුර්ත අනුවාදය වේ ; යනාදියෙහි සමමුහුර්ත අනුවාදය වේ .fs.StatsSyncstatSyncstatlstatSynclstat
lstatSync යමක් තිබේද යන්නත්, එසේ නම් එය ගොනුවක් හෝ නාමාවලියක්ද යන්න (හෝ සමහර ගොනු පද්ධතිවල සංකේතාත්මක සබැඳියක්, බ්ලොක් උපාංගයක්, අක්ෂර උපාංගයක් යනාදිය) ඔබට කියයි, උදා. එය තිබේදැයි දැන ගැනීමට ඔබට අවශ්ය නම් නාමාවලිය:
var fs = require('fs');
try {
// Query the entry
stats = fs.lstatSync('/the/path');
// Is it a directory?
if (stats.isDirectory()) {
// Yes it is
}
}
catch (e) {
// ...
}
... ඒ හා සමානව, එය ගොනුවක් නම්, තිබේ isFile; එය බ්ලොක් උපාංගයක් නම් isBlockDevice, යනාදිය ඇත. ආදිය සටහන් කරන්න try/catch. ප්රවේශය කිසිසේත්ම නොපවතී නම් එය දෝෂයක් ඇති කරයි.
ප්රවේශය යනු කුමක්දැයි ඔබ නොසලකන්නේ නම් සහ එය පවතින්නේ දැයි දැන ගැනීමට පමණක් අවශ්ය නම් path.existsSync, පරිශීලක 618408 විසින් සටහන් කරfs.existsSync ඇති පරිදි ඔබට (හෝ නවතම ඒවා සමඟ ) භාවිතා කළ හැකිය :
var path = require('path');
if (path.existsSync("/the/path")) { // or fs.existsSync
// ...
}
එයට අවශ්ය නොවන try/catchනමුත් එය කුමක්ද යන්න පිළිබඳව ඔබට කිසිදු තොරතුරක් ලබා නොදේ . path.existsSyncබොහෝ කලකට පෙර ඉවත් කරන ලදි.
පැති සටහන: ඔබ පැහැදිලිවම සමමුහුර්තව පරීක්ෂා කරන්නේ කෙසේදැයි විමසා ඇත , එබැවින් මම xyzSyncඉහත ශ්රිතවල අනුවාදයන් භාවිතා කර ඇත්තෙමි . නමුත් හැකි සෑම තැනකම, I / O සමඟ, සමමුහුර්ත ඇමතුම් වළක්වා ගැනීම වඩාත් සුදුසුය. I / O උප පද්ධතියට කෙරෙන ඇමතුම් CPU හි දෘෂ්ටි කෝණයෙන් සැලකිය යුතු කාලයක් ගතවේ. ඇමතීම lstatවඩා පහසු බව සලකන්න lstatSync:
// Is it a directory?
lstat('/the/path', function(err, stats) {
if (!err && stats.isDirectory()) {
// Yes it is
}
});
නමුත් ඔබට සමමුහුර්ත අනුවාදය අවශ්ය නම් එය එහි තිබේ.
මීට වසර කිහිපයකට පෙර ලබා දුන් පහත පිළිතුර දැන් යල්පැන ඇත. වර්තමාන ක්රමය වන්නේ fs.existsSyncලිපිගොනු / නාමාවලි පැවැත්ම සඳහා සමමුහුර්ත චෙක්පතක් කිරීම සඳහා භාවිතා කිරීමයි (හෝ ඇත්ත වශයෙන්ම fs.existsඅසමමුහුර්ත චෙක්පතක් සඳහා)path පහත අනුවාදයන්ට වඩා භාවිතා කිරීමයි.
උදාහරණයක්:
var fs = require('fs');
if (fs.existsSync(path)) {
// Do something
}
// Or
fs.exists(path, function(exists) {
if (exists) {
// Do something
}
});
මෙන්න අපි 2015 දී වන අතර නෝඩ් ලියකියවිලි දැන් පවසන්නේ fs.existsSync(සහfs.exists ) "අවලංගු කරනු ඇති" බවයි. (නෝඩ් ජනයා සිතන්නේ එය විවෘත කිරීමට පෙර යමක් තිබේද යන්න පරීක්ෂා කිරීම ගොළු බවය, එය එය ය; නමුත් යමක් තිබේද යන්න පරීක්ෂා කිරීමට එකම හේතුව එය නොවේ!)
ඒ නිසා අපි බොහෝ විට විවිධ statක්රම වෙත ආපසු යමු ... මෙය නැවත වෙනස් වන තුරු / ඇත්ත වශයෙන්ම.
එය කොපමණ කාලයක් ගත වී ඇත්දැයි නොදනී, නමුත් fs.access(path, fs.F_OK, ...)/fs.accessSync(path, fs.F_OK) . අවම වශයෙන් 2016 ඔක්තෝබර් වන විට, fs.statලේඛනfs.access පරීක්ෂා කිරීම සඳහා පැවැත්ම පරීක්ෂා කිරීම නිර්දේශ කරයි ( "ගොනුවක් පසුව හැසිරවීමකින් තොරව තිබේදැයි පරීක්ෂා fs.access()කිරීම රෙකමදාරු කරනු ලැබේ." ). නමුත් ප්රවේශය නොලැබීම දෝෂයක් ලෙස සලකන බව සලකන්න , එබැවින් ගොනුව ප්රවේශ විය හැකි යැයි ඔබ අපේක්ෂා කරන්නේ නම් මෙය වඩාත් සුදුසු වේ:
var fs = require('fs');
try {
fs.accessSync(path, fs.F_OK);
// Do something
} catch (e) {
// It isn't accessible
}
// Or
fs.access(path, fs.F_OK, function(err) {
if (!err) {
// Do something
} else {
// It isn't accessible
}
});
ඔබට භාවිතා කළ හැකිය fs.existsSync():
if (fs.existsSync(path)) {
// Do something
}
එය වසර ගණනාවක් තිස්සේ අවලංගු කරන ලද නමුත් තවදුරටත් එසේ නොවේ. ලියකියවිලි වලින්:
fs.exists()අවලංගු කර ඇති නමුත්fs.existsSync()එසේ නොවන බව සලකන්න . (fs.exists()වෙනත් Node.js ඇමතුම් සඳහා නොගැලපෙන පරාමිතීන් පිළිගැනීමට ඇති ඇමතුම් ආපසු පරාමිතිය . ඇමතුමක් ලබාfs.existsSync()නොගනී.)
openඇමතුම නිකුත් කර ව්යතිරේකය හැසිරවීම හෝ ගොනුව නොතිබුනේ නම් කුමක් කළ යුතුද ? හමු විය. ඇත්ත වශයෙන්ම, සැබෑ ලෝකය අවුල් සහගත ය: ඔබ පළමුව පරීක්ෂා කර එය එහි තිබේ නම්, එයින් අදහස් වන්නේ ඔබ එය විවෘත කිරීමට උත්සාහ කරන විට එය තවමත් පවතිනු ඇති බවයි; ඔබ පළමුව පරීක්ෂා කර එය නොමැති නම්, එයින් අදහස් වන්නේ එය මොහොතකට පසුව එහි නොඑන බවයි. ඒ වගේ දේවල් කාලානුරූපව පෙනේ, නමුත් ඒවා සෑම විටම පැමිණේ . එබැවින් ඔබ විවෘත කිරීමට යන්නේ නම් , පළමුව පරීක්ෂා කිරීමෙන් පලක් නැත.
මූලාශ්රය දෙස බලා, ක සම මුහුර්තක අනුවාදය තියෙනවා path.exists- path.existsSync. පෙනෙන ආකාරයට එය ලේඛනයේ මග හැරී ඇත.
path.existsහා path.existsSyncදැන් සිටින නොසලකා හරිනු . කරුණාකර භාවිතා කරන්න .fs.existsසහfs.existsSync
fs.exists හා අතහැර දමා . භාවිතය () fs.stat හෝ fs.access () වෙනුවට.fs.existsSyncද ඇත
භාවිතය fs.existsSync. එය අතහැර දමා නැත.
https://nodejs.org/api/fs.html#fs_fs_existssync_path
fs.existsSync.
fs.existsඅතහැර දැමූ ඒවා ලෙස ලේබල් කර ඇත fs.existsSync!
දැනට නිර්දේශිත (2015 වන විට) ඒපීඅයි භාවිතා කරමින් (නෝඩ් ලියකියවිලි අනුව), මම කරන්නේ මෙයයි:
var fs = require('fs');
function fileExists(filePath)
{
try
{
return fs.statSync(filePath).isFile();
}
catch (err)
{
return false;
}
}
අදහස් දැක්වීමේදී බ්රෝඩ්බෑන්ඩ් විසින් මතු කරන ලද ඊපර්ම් ප්රශ්නයට ප්රතිචාර වශයෙන් එය හොඳ කරුණක් ගෙන එයි. fileExists () බොහෝ විට මේ ගැන සිතීමට හොඳ ක්රමයක් නොවේ, මන්ද fileExists () හට සැබවින්ම බූලියන් ප්රතිලාභයක් පොරොන්දු විය නොහැක. ගොනුව තිබේද නැද්ද යන්න නිශ්චිතවම තීරණය කිරීමට ඔබට හැකි විය හැක, නමුත් ඔබට අවසර දෝෂයක්ද ලැබෙනු ඇත. අවසර දෝෂය අනිවාර්යයෙන්ම ගොනුව පවතින බව අඟවන්නේ නැත, මන්ද ඔබ පරීක්ෂා කරන ගොනුව අඩංගු නාමාවලියට ඔබට අවසර නොමැති විය හැකිය. ඇත්ත වශයෙන්ම ලිපිගොනු පැවැත්ම පරීක්ෂා කිරීමේදී ඔබට වෙනත් දෝෂයක් ඇතිවීමේ අවස්ථාව තිබේ.
එබැවින් ඉහත මගේ කේතය ඇත්ත වශයෙන්ම කරන්නේ FileExistAndDoIHaveAccessToIt (), නමුත් ඔබේ ප්රශ්නය විය හැක්කේ FileNotExistAndCouldICreateIt (), එය සම්පූර්ණයෙන්ම වෙනස් තර්කනයකි (එය ඊපර්ම් දෝෂයක් සඳහා ගණන් දිය යුතුය, වෙනත් දේ අතර).
Fs.existsSync පිළිතුර මෙහි කෙලින්ම ඇසූ ප්රශ්නයට ආමන්ත්රණය කරන අතර, එය බොහෝ විට ඔබට අවශ්ය දේ නොවනු ඇත (“යමක්” මාර්ගයක තිබේදැයි දැන ගැනීමට ඔබට අවශ්ය නැත, ඔබ බොහෝ විට “දෙය” ගැන සැලකිලිමත් වේ. පවතින ගොනුවක් හෝ නාමාවලියකි).
අවසාන කරුණ නම්, ඔබ ගොනුවක් තිබේදැයි බැලීමට පරික්ෂා කරන්නේ නම්, ඔබ බොහෝ විට එසේ කරන්නේ ඔබ ප්රති result ලය මත පදනම්ව යම් ක්රියාමාර්ගයක් ගැනීමට අදහස් කරන නිසා විය හැකි අතර, එම තර්කනය (චෙක්පත සහ / හෝ පසුව ක්රියා කිරීම) එම අදහසට අනුගත විය යුතුය. එම මාර්ගයේ සොයාගත් දෙයක් ගොනුවක් හෝ නාමාවලියක් විය හැකි අතර, පරීක්ෂා කිරීමේ ක්රියාවලියේදී ඔබට ඊපර්ම් හෝ වෙනත් දෝෂ ඇතිවිය හැකිය.
file.exists()3% සඳහා සරල ප්රයෝජනයක් නොතිබීම සහ ඒ වෙනුවට මෙය උත්සාහක දිනුම් ඇදීමක් සඳහා අපට බල කිරීම? සැබෑ වන්න ... දවසේ බැච්.
තවත් යාවත්කාලීන කිරීමක්
මෙම ප්රශ්නයට මා විසින්ම පිළිතුරක් අවශ්ය වූ විට මම නෝඩ් ඩොක්ස් දෙස බැලුවෙමි, ඔබ fs.exists භාවිතා නොකළ යුතු බව පෙනේ , ඒ වෙනුවට fs.open භාවිතා කර ගොනුවක් නොපවතින්නේ දැයි සොයා ගැනීමට ප්රතිදාන දෝෂ භාවිතා කරන්න:
ලේඛනයෙන්:
fs.exists () යනු අනුකම්පාවක් වන අතර එය පවතින්නේ historical තිහාසික හේතූන් මත පමණි. එය ඔබේම කේතයේ භාවිතා කිරීමට කිසි විටෙකත් හේතුවක් නොතිබිය යුතුය.
විශේෂයෙන්, ගොනුවක් විවෘත කිරීමට පෙර එය තිබේදැයි පරීක්ෂා කිරීම ඔබ ජාතියේ තත්වයන්ට ගොදුරු විය හැකි ප්රති-රටාවක් වේ: තවත් ක්රියාවලියක් මඟින් fs.exists () සහ fs.open () වෙත ඇමතුම් අතර ඇති ගොනුව ඉවත් කළ හැකිය. ගොනුව විවෘත කර එය නොමැති විට දෝෂය හසුරුවන්න.
ගොනුවක් තිබේදැයි පරීක්ෂා කිරීමට මම පහත ශ්රිතය භාවිතා කරමි. එය වෙනත් ව්යතිරේකයන් ද අල්ලා ගනී. එබැවින් අයිතිවාසිකම් ගැටළු තිබේ නම් උදා. chmod ugo-rwx filenameහෝ වින්ඩෝස්
Right Click -> Properties -> Security -> Advanced -> Permission entries: empty list ..ශ්රිතයේ ව්යතිරේකය නැවත පැමිණිය යුතුය. ගොනුව පවතින නමුත් එයට ප්රවේශ වීමට අපට අයිතියක් නැත. මේ ආකාරයේ ව්යතිරේකයන් නොසලකා හැරීම වැරදිය.
function fileExists(path) {
try {
return fs.statSync(path).isFile();
}
catch (e) {
if (e.code == 'ENOENT') { // no such file or directory. File really does not exist
console.log("File does not exist.");
return false;
}
console.log("Exception fs.statSync (" + path + "): " + e);
throw e; // something else went wrong, we don't have rights, ...
}
}
ව්යතිරේක ප්රතිදානය, ගොනුව නොපවතින විට nodejs දෝෂ ප්රලේඛනය :
{
[Error: ENOENT: no such file or directory, stat 'X:\\delsdfsdf.txt']
errno: -4058,
code: 'ENOENT',
syscall: 'stat',
path: 'X:\\delsdfsdf.txt'
}
ව්යතිරේකය අපට ගොනුවට අයිතිවාසිකම් නොමැති නමුත් පවතී:
{
[Error: EPERM: operation not permitted, stat 'X:\file.txt']
errno: -4048,
code: 'EPERM',
syscall: 'stat',
path: 'X:\\file.txt'
}
fs.exists () ඉවත් කර ඇත එය භාවිතා නොකරන්න https://nodejs.org/api/fs.html#fs_fs_exists_path_callback
මෙහි භාවිතා වන මූලික nodejs ක්රමය ඔබට ක්රියාත්මක කළ හැකිය: https://github.com/nodejs/node-v0.x-archive/blob/master/lib/module.js#L86
function statPath(path) {
try {
return fs.statSync(path);
} catch (ex) {}
return false;
}
මෙය සංඛ්යාලේඛන වස්තුව නැවත ලබා දෙනු ඇත, එවිට ඔබට උත්සාහ කළ හැකි සංඛ්යාන වස්තුව ලැබුනු පසු
var exist = statPath('/path/to/your/file.js');
if(exist && exist.isFile()) {
// do something
}
මෙහි සමහර පිළිතුරු එය පවසන fs.existsඅතර fs.existsSyncඒවා දෙකම ප්රතික්ෂේප කරනු ලැබේ. ලේඛනයට අනුව මෙය තවදුරටත් සත්ය නොවේ. fs.existsදැන් පමණක් ක්ෂය වී ඇත:
Fs.exists () අවලංගු කර ඇති නමුත් fs.existsSync () එසේ නොවන බව සලකන්න. (Fs.exists () වෙත වන ඇමතුම් ආපසු පරාමිතිය වෙනත් Node.js ඇමතුම් වලට නොගැලපෙන පරාමිතීන් පිළිගනී. Fs.existsSync () ඇමතුමක් භාවිතා නොකරයි.)
ගොනුවක් තිබේදැයි සමමුහුර්තව පරීක්ෂා කිරීමට ඔබට ආරක්ෂිතව fs.existsSync () භාවිතා කළ හැකිය .
මෙම pathමොඩියුලය ක සම මුහුර්තක අනුවාදය ලබා දෙන්නේ නැත path.existsඔබ සමග පමණ ශුක්ෂමව ඇති නිසා fsමොඩියුලය.
මට සිතාගත හැකි වේගවත්ම දෙය නම් භාවිතා කිරීම fs.realpathSyncඔබට අල්ලා ගත යුතු දෝෂයක් ඇති කරයි, එබැවින් ඔබ උත්සාහ කිරීම / අල්ලා ගැනීම සමඟ ඔබේම එතීමේ ක්රියාකාරිත්වය කළ යුතුය.
ගොනු පද්ධති (fs) පරීක්ෂණ භාවිතා කිරීමෙන් දෝෂ සහිත වස්තූන් අවුලුවනු ඇත, එවිට ඔබට උත්සාහ / අල්ලා ගැනීමේ ප්රකාශයක් ඔතා ගත යුතුය. ඔබ යම් උත්සාහයක් ඉතිරි කර 0.4.x ශාඛාවේ හඳුන්වා දුන් අංගයක් භාවිතා කරන්න.
var path = require('path');
var dirs = ['one', 'two', 'three'];
dirs.map(function(dir) {
path.exists(dir, function(exists) {
var message = (exists) ? dir + ': is a directory' : dir + ': is not a directory';
console.log(message);
});
});
ලේඛන fs.stat()fs.access()ඔබ ගොනුව හැසිරවීමට නොයන්නේ නම් භාවිතා කිරීමට සඳහන් වේ . එය සාධාරණීකරණය කිරීමක් ලබා දුන්නේ නැත, වේගවත් හෝ අඩු මතක භාවිතය විය හැකිද?
මම රේඛීය ස්වයංක්රීයකරණය සඳහා නෝඩ් භාවිතා කරමි, එබැවින් ගොනු පැවැත්ම පරීක්ෂා කිරීම සඳහා මා භාවිතා කරන ශ්රිතය බෙදා ගැනීමට සිතුවෙමි.
var fs = require("fs");
function exists(path){
//Remember file access time will slow your program.
try{
fs.accessSync(path);
} catch (err){
return false;
}
return true;
}
'නිවැරදිව' එම පුද්ගලයින් සඳහා යාවත්කාලීන කරන ලද asnwer එය ප්රශ්නයට කෙලින්ම පිළිතුරු නොදෙන බව පෙන්වා දෙමින් විකල්ප විකල්පයක් ගෙන එයි.
fs.existsSync('filePath')මෙහි ලියකියවිලි ද බලන්න .
මාර්ගය තිබේ නම් සත්ය වේ, වෙනත් ආකාරයකින් අසත්යය.
අසින්ක් සන්දර්භය තුළ ඔබට යතුරුපදය භාවිතා කරමින් සමමුහුර්ත ක්රමයේදී අසින්ක් අනුවාදය ලිවිය හැකිය await. ඔබට සරලවම අසින්ක් ඇමතුම් ක්රමය මෙවැනි පොරොන්දුවක් බවට පත් කළ හැකිය:
function fileExists(path){
return new Promise((resolve, fail) => fs.access(path, fs.constants.F_OK,
(err, result) => err ? fail(err) : resolve(result))
//F_OK checks if file is visible, is default does no need to be specified.
}
async function doSomething() {
var exists = await fileExists('filePath');
if(exists){
console.log('file exists');
}
}
ප්රවේශය පිළිබඳ ලියකියවිලි ().
function asyncFileExists(path) { //F_OK checks if file is visible, is default does no need to be specified. return new Promise(function (res, rej) { fs.access( path, fs.constants.F_OK, function (err) { err ? rej(err) : res(true); }, ); }); }
අවස්ථා තිබේ, ඔබට ගොනුවක් තිබේදැයි දැන ගැනීමට අවශ්ය නම්, එය අවශ්ය නම් එය අවශ්ය කිරීමට ඔබ සැලසුම් කරයි.
function getFile(path){
try{
return require(path);
}catch(e){
return false;
}
}
මෙන්න මේ සඳහා සරල එතීමේ විසඳුමක්:
var fs = require('fs')
function getFileRealPath(s){
try {return fs.realpathSync(s);} catch(e){return false;}
}
භාවිතය:
උදාහරණයක්:
var realPath,pathToCheck='<your_dir_or_file>'
if( (realPath=getFileRealPath(pathToCheck)) === false){
console.log('file/dir not found: '+pathToCheck);
} else {
console.log('file/dir exists: '+realPath);
}
නැවත පැමිණීම අසත්යදැයි පරීක්ෂා කිරීමට ඔබ === ක්රියාකරු භාවිතා කරන බවට වග බලා ගන්න. නිසි සේවා කොන්දේසි යටතේ fs.realpathSync () අසත්ය බවට පත්වීමට කිසිදු තර්කානුකූල හේතුවක් නොමැත, එබැවින් මෙය 100% ක් ක්රියාත්මක විය යුතු යැයි මම සිතමි.
දෝෂයක් ජනනය නොකරන සහ එහි ප්රති performance ලයක් ලෙස ක්රියාකාරීත්වයට පහර නොදෙන විසඳුමක් දැකීමට මම කැමැත්තෙමි. API දෘෂ්ටි කෝණයකින්, fs.exists () වඩාත් අලංකාර විසඳුමක් සේ පෙනේ.
පිළිතුරු වලින් පෙනී යන්නේ මේ සඳහා නිල API සහාය නොමැති බවයි (සෘජු හා පැහැදිලි චෙක්පතක දී මෙන්). බොහෝ පිළිතුරු පවසන්නේ සංඛ්යා භාවිතා කරන ලෙසයි, කෙසේ වෙතත් ඒවා දැඩි නොවේ. සංඛ්යාලේඛන මගින් විසි කරන ඕනෑම දෝෂයක් යනු යමක් නොපවතින බව අපට උපකල්පනය කළ නොහැක.
නොපවතින දෙයක් සමඟ අපි එය උත්සාහ කරමු යැයි කියමු:
$ node -e 'require("fs").stat("god",err=>console.log(err))'
{ Error: ENOENT: no such file or directory, stat 'god' errno: -2, code: 'ENOENT', syscall: 'stat', path: 'god' }
පවතින නමුත් අපට ප්රවේශය නොමැති දෙයක් සමඟ එය උත්සාහ කරමු:
$ mkdir -p fsm/appendage && sudo chmod 0 fsm
$ node -e 'require("fs").stat("fsm/appendage",err=>console.log(err))'
{ Error: EACCES: permission denied, stat 'access/access' errno: -13, code: 'EACCES', syscall: 'stat', path: 'fsm/appendage' }
අවම වශයෙන් ඔබට අවශ්ය වනු ඇත:
let dir_exists = async path => {
let stat;
try {
stat = await (new Promise(
(resolve, reject) => require('fs').stat(path,
(err, result) => err ? reject(err) : resolve(result))
));
}
catch(e) {
if(e.code === 'ENOENT') return false;
throw e;
}
if(!stat.isDirectory())
throw new Error('Not a directory.');
return true;
};
ඔබට එය සැබවින්ම සමමුහුර්ත වීමට අවශ්යද නැතිනම් එය සමමුහුර්ත ලෙස ලිවීමට අවශ්යද යන ප්රශ්නය පැහැදිලි නැත. මෙම උදාහරණය wait / async භාවිතා කරයි, එවිට එය සමකාලීනව ලියා ඇති නමුත් සමමුහුර්තව ක්රියාත්මක වේ.
මෙයින් අදහස් කරන්නේ ඔබ එය ඉහළ මට්ටමින් හැඳින්විය යුතු බවයි:
(async () => {
try {
console.log(await dir_exists('god'));
console.log(await dir_exists('fsm/appendage'));
}
catch(e) {
console.log(e);
}
})();
විකල්පයක් නම්, ඔබට තව දුරටත් අවශ්ය නම්, අසින්ක් ඇමතුමෙන් ලැබෙන පොරොන්දුව මත .තන් සහ .කැච් භාවිතා කිරීමයි.
ඔබට යමක් තිබේදැයි පරීක්ෂා කිරීමට අවශ්ය නම් එය නාමාවලියක් හෝ ගොනුවක් වැනි නිවැරදි වර්ගයක් බව සහතික කිරීම හොඳ පුරුද්දකි. මෙය උදාහරණයට ඇතුළත් කර ඇත. එය සිම්ලින්ක් වීමට ඉඩ නොදෙන්නේ නම්, සංඛ්යා ස්වයංක්රීයව සබැඳි හරහා ගමන් කරන බැවින් ඔබ සංඛ්යා වෙනුවට lstat භාවිතා කළ යුතුය.
ඔබට මෙහි ඇති සියලුම සමමුහුර්ත කේතය සමමුහුර්ත කිරීම සඳහා ප්රතිස්ථාපනය කර ඒ වෙනුවට statSync භාවිතා කළ හැකිය. කෙසේවෙතත්, සමමුහුර්තකරණය සහ විශ්වීය සහයෝගය ලබා ගැනීමට බලා සිටීම සමමුහුර්ත ඇමතුම් අවසානයේදී ක්ෂය වීමට අතිරික්ත වනු ඇතැයි අපේක්ෂා කරන්න (එසේ නොමැතිනම් ඔබට ඒවා සෑම තැනකම අර්ථ දැක්විය යුතු අතර දම්වැල ඉහළට ඔසවා තැබීම අර්ථ විරහිත කරයි).