2009-06-17 59 views
10

Tôi đang sử dụng thư viện FTPClient để chuyển tệp từ chia sẻ Windows sang máy chủ FTP.Truy cập tệp bị từ chối

Phương pháp SendFile của thư viện sử dụng đoạn mã sau:

FileStream stream = new FileStream(localFileName, FileMode.Open); 

Điều này dẫn đến một System.UnauthorizedAccessException bị ném, tuy nhiên tôi có thể mở, đổi tên và di chuyển các tập tin sử dụng Windows Explorer dưới cùng một tài khoản người dùng mà mã đang được thực hiện.

Bất cứ ai có thể cho tôi biết lý do điều này xảy ra?

Edit:

Điều kỳ lạ là tôi có thể truy cập vào các file khác trên cổ phiếu đã được cấp quyền NTFS giống như một mà tôi không thể.

Đây cũng là ứng dụng biểu mẫu Windows.

Cập nhật:

Vẫn không có may mắn với điều này. Tôi có thể đọc tệp bằng cách sử dụng StreamReader nhưng không thể đọc luồng tệp. Tôi không thể hiểu tại sao hai người lại hành xử khác nhau.

+0

quí vị muốn gọi này từ một ứng dụng 'cửa sổ hình thức', hoặc một trang ASP.NET? – russau

+0

từ cửa sổ ứng dụng biểu mẫu –

+1

mọi cơ hội bạn đang chạy ứng dụng từ phần chia sẻ? tôi biết .net (theo mặc định) làm giảm quyền của ứng dụng khi bạn làm điều đó. – russau

Trả lời

0

quyền 1) NTFS trên thư mục vật lý sử dụng nhà thám hiểm

2) Trong trang web IIS MMC console FTP để cho phép đọc/ghi vào thư mục FTP

3) Đảm bảo rằng các trang web FTP hoặc thư mục ảo thực sự tồn tại, khi kiểm tra các bước trên

http://www.eggheadcafe.com/forumarchives/inetserveriisftp/Jan2006/post25322215.asp

+0

Tôi tin rằng lỗi đang xảy ra khi mở tệp trước khi gửi? tức là quyền truy cập trang FTP sẽ không phải là yếu tố tại thời điểm này. – russau

1

quá trình đang chạy mã của bạn không có quyền truy cập vào các tập tin. Là một phần của ứng dụng web - nếu bạn cần cấp quyền truy cập vào tài khoản ASPNET.

Cấp quyền cho 'mọi người' trên tệp và xem liệu nó có còn gặp sự cố hay không.

0

Dự án của bạn có đang chạy từ ổ đĩa mạng không? Nếu vậy điều đó có nghĩa là nó sẽ chạy trong một chế độ đặc quyền hạn chế có thể gây ra điều này. Thử sao chép dự án vào ổ C của bạn và chạy lại nó.

+0

Không, tôi đang chạy nó trong chế độ gỡ lỗi từ trong studio trực quan từ thư mục dự án cục bộ mặc định. Tôi đang cố truy cập tệp qua đường dẫn UNC của nó, ví dụ: \\ server \ share \ file nhưng miễn là tôi có các quyền chính xác (tôi có quyền truy cập đầy đủ) không phải là vấn đề phải không? –

27

Bạn có chắc đó là tài khoản người dùng giống nhau không? Bạn có thể thử một cái gì đó như

MessageBox.Show(WindowsIdentity.GetCurrent().Name); 

?

Ngoài ra, bạn có chắc tệp không phải là chỉ đọc không? Bạn có cần quyền truy cập ghi vào tệp không? Nếu không, bạn có thể thử:

FileStream stream = new FileStream(localFileName, FileMode.Open, FileAccess.Read); 
+0

Đúng một tài khoản. –

+12

Cảm ơn câu trả lời của bạn. Tệp của tôi là chỉ đọc nhưng vì tôi không yêu cầu quyền ghi, tôi giả định rằng FileAccess.Read không cần thiết. Tôi đã sai. Thêm FileAccess.Read là chìa khóa. –

0

Gần lớp FileSecurity.

Xem tại FileSecurity class

và thử:

 // Get a FileSecurity object that represents the 
     // current security settings. 
     FileSecurity fSecurity = File.GetAccessControl(localFileName); 

     // Add the FileSystemAccessRule to the security settings. 
     fSecurity.AddAccessRule(new FileSystemAccessRule("DOMAIN\USERNAME", 
      FileSystemRights.ReadData, AccessControlType.Allow)); 

     // Set the new access settings. 
     File.SetAccessControl(localFileName, fSecurity); 
+0

Kết quả là: Ngoại lệ không đúng: System.Security.Principal.IdentityNotMappedException: Một số hoặc tất cả các tham chiếu danh tính không thể dịch được. Có tín thác tên miền liên quan đến thiết lập này, ví dụ: tôi là thành viên của một nhóm trong một miền khác được cấp quyền truy cập vào tệp này, tôi tự hỏi liệu điều đó có ảnh hưởng đến điều này hay không. –

+0

Bạn có thay đổi chuỗi "DOMAIN \ USERNAME" không? – Chernikov

+0

oops tôi đã làm nhưng quên để thoát khỏi "\", nó chạy tốt bây giờ nhưng tôi vẫn không thể truy cập vào tập tin. –

Các vấn đề liên quan