2009-09-20 5 views
12

Tôi đã lưu một tệp dữ liệu XML nhỏ vào một ổ đĩa ngoài, không có probs. Nhưng sau đó tôi đã cố gắng sử dụng thư mục ApplicationData và những người khác, thậm chí C: \ nhưng không may mắn. Tôi nhận được một lỗi như "Truy cập vào đường dẫn" C: \ "bị từ chối"."Truy cập vào đường dẫn ... bị từ chối" (.NET C#)

Chỉ cần xác nhận, tệp được tạo và đọc tốt với mã hiện tại, vào ổ đĩa ngoài. Tôi đoán đây là một cái gì đó để làm với an ninh & quyền nhưng tôi đã không tìm thấy bất cứ điều gì quá hữu ích.

Cảm ơn trước nếu bạn có thể chỉ cho tôi đúng hướng trên trang này!

 string fipData = @"F:\IL2\SIIYM\SIIYM Data.xml"; // external drive ok :-) 
     //string fipData = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); 
     //string fipData = @"C:\"; 

     // if the XML data file doesn't exist, create it 
     bool dataFileExists = File.Exists(fipData); 
     if (dataFileExists) 
     { 
      // read the XML values 
      XDocument xData = XDocument.Load(fipData); 
      //... 
     } 
     else 
     { 
      // create & save the XML data file 
      XElement xLastPath = new XElement(el_lastPath, ""); 
      XElement xLastCode = new XElement(el_lastCode, ""); 

      XElement xRoot = new XElement(el_root); 
      xRoot.Add(xLastPath); 
      xRoot.Add(xLastCode); 

      XDocument newDataFile = new XDocument(); 
      newDataFile.Add(xRoot); 

      try 
      { 
       newDataFile.Save(fipData); 
      } 
      catch (Exception ex) 
      { 
       MessageBox.Show("Data file unable to be created. System message:{0}".Put(Environment.NewLine + Environment.NewLine + ex.Message)); 
      } 
     } 
+0

Umm ... Tôi không biết tại sao nhưng khi thức dậy sáng nay, nó hoạt động cho ApplicationData. Nó sẽ được tốt đẹp để biết lý do tại sao. Tôi đã có một số vấn đề khi thay đổi từ Debug để phát hành xây dựng. Tôi chỉ có thể cho rằng nó liên quan đến điều đó. Cảm ơn tất cả vì những suy nghĩ của bạn! – MrGreggles

+0

Các khai báo "fipData" đã nhận xét trong mã mẫu của bạn không thực sự chỉ định tên tệp - chỉ là đường dẫn. Đó có phải là lỗi đánh máy không? –

+0

Blush Matt, đó có thể là nguyên nhân. Ngày dài, não zap. Cảm ơn tất cả các guys cho ý tưởng của bạn! – MrGreggles

Trả lời

2

Tôi chỉ có thể tưởng tượng rằng ứng dụng phải đang chạy trong ngữ cảnh của người dùng không có quyền truy cập vào ổ đĩa cục bộ, ví dụ: một trang web ASP.NET chạy dưới tài khoản IIS ẩn danh hoặc tài khoản dịch vụ chỉ có quyền truy cập vào các vị trí mạng có liên quan.

+0

Rất tiếc, ngữ cảnh ở đây là: * Máy tính cá nhân của tôi * Windows 7 * Ứng dụng dành cho máy tính để bàn Chỉ là cài đặt UAC của tôi (mặc định) quá cao? Làm thế nào tôi có thể biết nếu nó sẽ hoạt động trên máy tính của người khác? – MrGreggles

1

Rất có thể ổ đĩa ngoài được định dạng bằng FAT. FAT không hỗ trợ quản lý quyền cho người dùng, do đó, tiết kiệm có ok.

Bên cạnh đó IIS Người dùng không có quyền đối với các thư mục khác như Adam đề cập đã

11

Trong những ý kiến ​​cho câu trả lời khác bạn nói điều này là một ứng dụng máy tính để bàn, do đó cho phép đối xử với từng địa điểm riêng biệt.

Trong Vista và hơn thế nữa, người dùng thông thường không có quyền tạo tệp trong thư mục gốc của ổ đĩa hệ thống (thường là C :). Bạn có thể thấy điều này cho chính mình bằng cách mở C: \ trong explorer, nhấn chuột phải và cố gắng tạo một tập tin - bạn sẽ nhận được một dấu nhắc UAC. Vì vậy, nếu bạn muốn ghi vào C: \ thì ứng dụng của bạn cần chạy với tư cách quản trị viên, thông qua độ cao yêu cầu biểu hiện phù hợp hoặc bằng cách bắt đầu một quá trình riêng biệt khi bạn muốn ghi vào vị trí đó.

Dữ liệu ứng dụng, môi trường.SpecialFolder.ApplicationData nên hoạt động. Nếu bạn xuất thư mục thực sự trả về những gì bạn nhận được?

+0

Cảm ơn bạn đã trả lời! Environment.SpecialFolder.ApplicationData: C: \ Users \ MrGreggles \ AppData \ Roaming \ SIIYM Data.xml – MrGreggles

+0

Nó hoạt động ngay bây giờ, đánh bại tôi tại sao. – MrGreggles

+2

AppData luôn hoạt động, điều đó rất lạ! – blowdart