Sự khác nhau giữa "\" "/" của path file trong nodejs

 function upload(response, request) {
	console.log("Request handler 'upload' was called.");

	var form = new formidable.IncomingForm();
	console.log("about to parse");
	form.parse(request, function(error, fields, files) {
		console.log("parsing done");
        /*may error on Windows system:
          rename to an already existing file */
		console.log(files.upload.path); //print file path in console
		fs.rename(files.upload.path,  'C:/Users/HIEUXI~1/AppData/Local/Temp/test.png', function(err) {
			if (err) {
			fs.unlink('C:/Users/HIEUXI~1/AppData/Local/Temp/test.png');
			console.log("sucessfully deleted /tmp/test.png");
			fs.rename(files.upload.path,'C:/Users/HIEUXI~1/AppData/Local/Temp/test.png');
			console.log("Renamed complete");
			}
		});
		
	response.writeHead(200, {"Content-Type": "text/html"});
	response.write("Recevied the image<br/>");
	response.write("<img src='/show' />");
	console.log("Received complete")
	response.end();
  });

}

Trong cái đoạn code này em dùng module fs để rename file’s path mà lúc em gõ C:…\temp\test.png thì nó bị lỗi ENOENT lúc unlink lên stackoverflow nó chỉ đổi \ thành / thì unlink được. Hơi khó hiểu, ai chỉ cho em vì sao đổi \ thành / thì chạy được thế, trong khi em console.log(old file path) thì nó là C:…\temp… mà

À không hẳn của Node.js đâu bạn…

Cơ bản là thế này…

  • Hệ điều hành Windows thì tụi nó nhận “” và “/”
  • Hệ điều hành Unix-Linux nói chung, tụi nó chỉ nhận “/” thôi :smiley:

Bạn nên sử dung dấu “/” để an toàn :wink:

1 Like

Ủa nếu windows nhận cả 2 thì khi em để \ thì nó vẫn unlink được chứ, đằng này vẫn bị lỗi ENOENT. Em xài windows mà

Chuyển tất cả \ về thành \\

không, code chạy được rồi. Nhưng mà em ko hiểu là tại sao đổi \ thành / như code bên trên thì lại chạy được. Anh kia bảo windows nhận cả \ và / thì logic thì \ vẫn chạy được chứ

Trong nodejs thì path của windows dùng \\ chứ không phải \ nhé. (vì \ là kí tự đặc biệt trong string)

Không chối nhé… Bạn sử dung “” chứ không phải “\” như @iamz vừa nói…

Tks nhé bị nhầm rồi :3 \\ để nó nhận thành dấu \ nhé

Sao vậy… thì trong Windows nó hiểu là “” và “/” mà… nhưng trong ngôn ngữ lập trình thì phải viết “\” mới trở thành “” được… Thấy có gì đâu :stuck_out_tongue:

Thì mình nói trong nodejs mà, do không giải thích rõ ra nên nó chọi nhau :3

À, không riêng gì Node.js đâu :smiley: Hồi đó code mấy ngôn ngữ khác cũng bị…

Thì \ là kí tự đặc biệt trong string của hầu hết ngôn ngữ mà :wink:

1 Like

oh… có vẻ chúng ta đang không hiểu nhau :smiley: Sorry bạn nhé :wink:

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?