@@ -300,6 +300,93 @@ fs.access('/etc/passwd', fs.R_OK | fs.W_OK, (err) => {
300300});
301301``` 
302302
303+ Using ` fs.access() `  to check for the accessibility of a file before calling
304+ ` fs.open() ` , ` fs.readFile() `  or ` fs.writeFile() `  is not recommended. Doing
305+ so introduces a race condition, since other processes may change the file's
306+ state between the two calls. Instead, user code should open/read/write the
307+ file directly and handle the error raised if the file is not accessible.
308+ 
309+ For example:
310+ 
311+ 
312+ ** write (NOT RECOMMENDED)** 
313+ 
314+ ``` js 
315+ fs .access (' myfile' err ) =>  {
316+   if  (! err) {
317+     console .error (' myfile already exists' 
318+     return ;
319+   }
320+ 
321+   fs .open (' myfile' ' wx' err , fd ) =>  {
322+     if  (err) throw  err;
323+     writeMyData (fd);
324+   });
325+ });
326+ ``` 
327+ 
328+ ** write (RECOMMENDED)** 
329+ 
330+ ``` js 
331+ fs .open (' myfile' ' wx' err , fd ) =>  {
332+   if  (err) {
333+     if  (err .code  ===  " EEXIST" 
334+       console .error (' myfile already exists' 
335+       return ;
336+     } else  {
337+       throw  err;
338+     }
339+   }
340+ 
341+   writeMyData (fd);
342+ });
343+ ``` 
344+ 
345+ ** read (NOT RECOMMENDED)** 
346+ 
347+ ``` js 
348+ fs .access (' myfile' err ) =>  {
349+   if  (err) {
350+     if  (err .code  ===  " ENOENT" 
351+       console .error (' myfile does not exist' 
352+       return ;
353+     } else  {
354+       throw  err;
355+     }
356+   }
357+ 
358+   fs .open (' myfile' ' r' err , fd ) =>  {
359+     if  (err) throw  err;
360+     readMyData (fd);
361+   });
362+ });
363+ ``` 
364+ 
365+ ** read (RECOMMENDED)** 
366+ 
367+ ``` js 
368+ fs .open (' myfile' ' r' err , fd ) =>  {
369+   if  (err) {
370+     if  (err .code  ===  " ENOENT" 
371+       console .error (' myfile does not exist' 
372+       return ;
373+     } else  {
374+       throw  err;
375+     }
376+   }
377+ 
378+   readMyData (fd);
379+ });
380+ ``` 
381+ 
382+ The "not recommended" examples above check for accessibility and then use the
383+ file; the "recommended" examples are better because they use the file directly
384+ and handle the error, if any.
385+ 
386+ In general, check for the accessibility of a file only if the file won’t be
387+ used directly, for example when its accessibility is a signal from another
388+ process.
389+ 
303390## fs.accessSync(path[ , mode] )  
304391<!--  YAML
305392added: v0.11.15 
@@ -487,11 +574,83 @@ fs.exists('/etc/passwd', (exists) => {
487574});
488575``` 
489576
490- ` fs.exists() `  should not be used to check if a file exists before calling
491- ` fs.open() ` . Doing so introduces a race condition since other processes may
492- change the file's state between the two calls. Instead, user code should
493- call ` fs.open() `  directly and handle the error raised if the file is
494- non-existent.
577+ Using ` fs.exists() `  to check for the existence of a file before calling
578+ ` fs.open() ` , ` fs.readFile() `  or ` fs.writeFile() `  is not recommended. Doing
579+ so introduces a race condition, since other processes may change the file's
580+ state between the two calls. Instead, user code should open/read/write the
581+ file directly and handle the error raised if the file does not exist.
582+ 
583+ For example:
584+ 
585+ ** write (NOT RECOMMENDED)** 
586+ 
587+ ``` js 
588+ fs .exists (' myfile' exists ) =>  {
589+   if  (exists) {
590+     console .error (' myfile already exists' 
591+   } else  {
592+     fs .open (' myfile' ' wx' err , fd ) =>  {
593+       if  (err) throw  err;
594+       writeMyData (fd);
595+     });
596+   }
597+ });
598+ ``` 
599+ 
600+ ** write (RECOMMENDED)** 
601+ 
602+ ``` js 
603+ fs .open (' myfile' ' wx' err , fd ) =>  {
604+   if  (err) {
605+     if  (err .code  ===  " EEXIST" 
606+       console .error (' myfile already exists' 
607+       return ;
608+     } else  {
609+       throw  err;
610+     }
611+   }
612+   writeMyData (fd);
613+ });
614+ ``` 
615+ 
616+ ** read (NOT RECOMMENDED)** 
617+ 
618+ ``` js 
619+ fs .exists (' myfile' exists ) =>  {
620+   if  (exists) {
621+     fs .open (' myfile' ' r' err , fd ) =>  {
622+       readMyData (fd);
623+     });
624+   } else  {
625+     console .error (' myfile does not exist' 
626+   }
627+ });
628+ ``` 
629+ 
630+ ** read (RECOMMENDED)** 
631+ 
632+ ``` js 
633+ fs .open (' myfile' ' r' err , fd ) =>  {
634+   if  (err) {
635+     if  (err .code  ===  " ENOENT" 
636+       console .error (' myfile does not exist' 
637+       return ;
638+     } else  {
639+       throw  err;
640+     }
641+   } else  {
642+     readMyData (fd);
643+   }
644+ });
645+ ``` 
646+ 
647+ The "not recommended" examples above check for existence and then use the
648+ file; the "recommended" examples are better because they use the file directly
649+ and handle the error, if any.
650+ 
651+ In general, check for the existence of a file only if the file won’t be
652+ used directly, for example when its existence is a signal from another
653+ process.
495654
496655## fs.existsSync(path)  
497656<!--  YAML
0 commit comments