Lỗi gặp phải
Bạn nhấn Save, và VS Code báo lỗi:
EPERM: operation not permitted, open 'C:\Users\username\project\src\index.ts'
Đôi khi đây chỉ là lỗi nhất thời. Nhưng nhiều khi nó chặn mọi thao tác lưu cho đến khi bạn khởi động lại VS Code — hoặc reboot máy, rồi sáng hôm sau lỗi lại xuất hiện. Dưới đây là nguyên nhân thực sự và cách xử lý dứt điểm.
Nguyên nhân gây ra EPERM trên Windows
EPERM là khi hệ điều hành từ chối thao tác file ở cấp độ syscall. Trên Windows, lý do thường xuất phát từ một trong các trường hợp sau:
- Phần mềm diệt virus / bảo mật đang khóa file trong lúc lưu để quét
- OneDrive hoặc Dropbox đang đồng bộ và giữ khóa độc quyền trên file đúng lúc VS Code cố ghi
- Một tiến trình khác (trình theo dõi Node.js, một instance editor khác, một công cụ build) đang mở file với khóa độc quyền
- Không đủ quyền trên file hoặc thư mục — thường xảy ra khi project được tạo bởi người dùng khác hoặc được clone với quyền Administrator
- Giới hạn độ dài đường dẫn của Windows — đặc biệt khi
node_moduleslồng sâu vượt quá giới hạn 260 ký tự
Cách sửa 1: Thêm thư mục project vào danh sách ngoại lệ của phần mềm diệt virus (Thường gặp nhất)
Windows Defender — và hầu hết phần mềm AV bên thứ ba — đều can thiệp vào các thao tác ghi file. Khi chặn lại thao tác lưu của VS Code, phần mềm này tạm thời khóa file handle để quét. Quá trình quét có thể mất từ 50ms đến vài trăm millisecond. Thao tác ghi của VS Code bị timeout, và bạn nhận được lỗi EPERM.
Đối với Windows Defender
- Mở Windows Security → Virus & threat protection
- Vào Virus & threat protection settings → Exclusions → Add or remove exclusions
- Nhấn Add an exclusion → Folder
- Chọn thư mục gốc của project (ví dụ:
C:\Users\username\project)
Nhân tiện, hãy thêm cả file thực thi của VS Code vào danh sách ngoại lệ:
C:\Users\username\AppData\Local\Programs\Microsoft VS Code\Code.exe
Thử lưu file lại. Chín trong mười trường hợp, chỉ cần làm vậy là xong.
Cách sửa 2: Tạm dừng đồng bộ hoặc chuyển project ra ngoài thư mục đồng bộ
Các project nằm trong OneDrive, Dropbox hoặc Google Drive là nguồn gây ra vấn đề quen thuộc. Ứng dụng đồng bộ có thể chiếm khóa độc quyền trên file đúng lúc VS Code đang ghi — và lỗi EPERM là cách hệ điều hành thực thi khóa đó.
Cách chẩn đoán nhanh nhất: chuyển project sang C:\dev\project và xem lỗi có biến mất không. Nếu có, đó chính là nguyên nhân. Hãy giữ các project phát triển ngoài thư mục đồng bộ, hoặc tạm dừng đồng bộ khi đang code.
Với OneDrive, nhấp chuột phải vào biểu tượng dưới khay hệ thống → Pause syncing → chọn khoảng thời gian. Hai tiếng thường đủ cho một phiên làm việc.
Cách sửa 3: Đặt lại quyền thư mục
Chạy git clone với quyền Administrator là nguyên nhân thường gặp nhất. Tài khoản người dùng thông thường của bạn sẽ không có quyền ghi vào các file được tạo trong phiên có quyền nâng cao.
Kiểm tra quyền sở hữu:
icacls "C:\Users\username\project" /T
Sau đó đặt lại quyền và cấp quyền toàn quyền cho người dùng hiện tại:
icacls "C:\Users\username\project" /reset /T /C
icacls "C:\Users\username\project" /grant %USERNAME%:F /T /C
/T duyệt đệ quy vào các thư mục con, F là toàn quyền, và /C tiếp tục dù có lỗi. Chạy lệnh này trong Command Prompt thông thường (không phải elevated). Nếu bạn thích PowerShell:
$path = "C:\Users\username\project"
$acl = Get-Acl $path
$rule = New-Object System.Security.AccessControl.FileSystemAccessRule(
$env:USERNAME, "FullControl", "ContainerInherit,ObjectInherit", "None", "Allow"
)
$acl.SetAccessRule($rule)
Set-Acl $path $acl
Cách sửa 4: Tìm và dừng tiến trình đang khóa file
Có thứ gì đó đang mở file và không chịu nhả ra. Sysinternals Process Explorer và Resource Monitor tích hợp sẵn đều có thể cho bạn biết đó là tiến trình nào.
Trong Resource Monitor (tìm kiếm trong Start):
- Vào tab CPU → Associated Handles
- Tìm tên file (ví dụ:
index.ts) - Nhấp chuột phải vào tiến trình đang khóa → End Process
Trong các project Node.js, các trình theo dõi file thường là thủ phạm — nodemon, webpack-dev-server, ts-node --watch. Dừng dev server lại, lưu file, rồi khởi động lại. Chỉ mất 10 giây và thường hiệu quả ngay.
Cách sửa 5: Bật hỗ trợ đường dẫn dài
Windows giới hạn độ dài đường dẫn file ở 260 ký tự theo mặc định. Các đường dẫn bên trong node_modules lồng sâu thường xuyên vượt quá giới hạn này, gây ra lỗi EPERM trông giống hệt lỗi quyền nhưng thực ra không phải.
Bật hỗ trợ đường dẫn dài trong PowerShell (chạy với quyền Administrator):
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem" `
-Name LongPathsEnabled -Value 1
Hoặc qua Group Policy: gpedit.msc → Computer Configuration → Administrative Templates → System → Filesystem → Enable Win32 long paths.
Khởi động lại VS Code sau khi thay đổi. Cách sửa này không có tác dụng phụ gì — cứ áp dụng cho mọi máy dev chạy Windows.
Cách sửa 6: Chọn một chế độ quyền và giữ nhất quán
Việc thay đổi qua lại giữa chạy VS Code với quyền Administrator và chạy thông thường là nguyên nhân gây EPERM khá phổ biến nhưng ít ai ngờ tới. Các file được tạo trong một chế độ sẽ có quyền sở hữu mà chế độ kia không thể truy cập.
Hãy chọn một chế độ và giữ nhất quán. Với hầu hết công việc phát triển, phiên người dùng thông thường là lựa chọn mặc định phù hợp. Khi thực sự cần quyền admin cho một việc cụ thể, hãy mở một terminal elevated riêng — đừng chạy bản thân VS Code với quyền admin.
Xác nhận đã sửa xong
Lưu file trước đó bị lỗi. Nếu thành công, hãy kiểm tra thêm quyền ghi ở cấp độ hệ điều hành trực tiếp trong PowerShell:
$f = [System.IO.File]::Open(
"C:\Users\username\project\src\index.ts",
[System.IO.FileMode]::Open,
[System.IO.FileAccess]::ReadWrite
)
$f.Close()
Write-Host "Write access confirmed"
Lệnh này mở file ở chế độ đọc-ghi mà không thay đổi nội dung. Nếu hoàn thành không có lỗi, vấn đề quyền đã được giải quyết ở cấp độ hệ điều hành — không chỉ riêng trong VS Code.
Cũng nên kiểm tra: panel Output của VS Code (Ctrl+Shift+U, chọn "Log (Extension Host)") — log sạch không có lỗi EPERM là xác nhận bạn đã xử lý xong.
Phòng ngừa
- Thêm thư mục project vào ngoại lệ AV ngay từ đầu — đưa vào checklist thiết lập máy dev, đừng để đến khi gặp vấn đề mới làm.
- Giữ các project dev ngoài OneDrive/Dropbox — một thư mục riêng như
C:\dev\hoặcD:\projects\giúp tránh cả một loại lỗi liên quan đến đồng bộ. - Không bao giờ clone repo với quyền Administrator trừ khi có lý do cụ thể — hậu quả về quyền không rõ ràng ngay và chỉ xuất hiện vài tiếng sau khi thao tác lưu bắt đầu thất bại.
- Bật đường dẫn dài trên toàn hệ thống cho mọi máy dev Windows — không có tác dụng phụ gì, và loại bỏ hoàn toàn một nhóm lỗi liên quan đến
node_modulestrước khi chúng xuất hiện.
Nếu công việc của bạn trải dài trên cả Linux và Windows và quyền file thường xuyên là mối lo, Unix Permissions Calculator trên ToolCraft rất tiện để trực quan hóa các giá trị chmod — hữu ích khi shell script hoặc cấu hình CI cần các bit quyền cụ thể được thiết lập đúng trên phía Linux.

