Tôi có một ứng dụng đang xem xét một số tệp cho dữ liệu cũ. Để đảm bảo chúng tôi không làm hỏng các dự án tốt, tôi sẽ sao chép các tệp vào một vị trí tạm thời. Một số thư mục tôi đang kiểm tra là các thư mục mã nguồn và chúng có thư mục .svn. Chúng tôi sử dụng Subversion để quản lý mã của chúng tôi.UnauthorizedAccessException trên các tệp mới được tạo
Khi tôi đã tìm kiếm qua tất cả các tệp, tôi muốn xóa bộ đệm tạm thời. Nghe có vẻ dễ dàng, phải không?
Vì một số lý do, tất cả thư mục .svn của tôi sẽ không xóa khỏi bộ nhớ cache. Chúng làm hỏng ứng dụng.
Vì lý do (quá sâu để đi vào đây), tôi phải sử dụng thư mục tạm thời, do đó, chỉ cần "quét tệp gốc" là do câu hỏi vì lý do chính trị.
Tôi có thể truy cập trình khám phá và xóa chúng. Không vấn đề gì. Không có cảnh báo. Chỉ cần xóa. Nhưng mã bị treo với "Access to {file} bị từ chối." Tôi đang ở trí thông minh của tôi kết thúc với điều này, vì vậy bất kỳ trợ giúp sẽ được đánh giá cao.
Trong khi tôi đã đơn giản hóa chức năng một LITTLE vì lợi ích của sự tỉnh táo của bạn, mã REALLY là về việc này đơn giản.
List<string> tmpCacheManifest = new List<string>();
string oldRootPath = "C:\\some\\known\\directory\\";
string tempPath = "C:\\temp\\cache\\";
foreach (string file in ListOfFilesToScan)
{
string newFile = file.Replace(oldRootPath, tempPath);
// This works just fine.
File.Copy(file, newFile);
tmpCacheManifest.add(newFile);
}
// ... do some stuff to the cache to verify what I need.
// Okay.. I'm done.. Delete the cache.
foreach (string file in tmpCacheManifest)
{
// CRASH!
File.Delete(file);
}
* Cập nhật *: Trường hợp ngoại lệ là UnauthorizedAccessException. Văn bản là "Truy cập vào đường dẫn" C: \ temp \ cache \ some-sub-dirs \ .svn \ entries 'bị từ chối. "
Nó xảy ra dưới XP, XP-Pro và Windows 7.
* Cập nhật 2 * Không ai trong số xác nhận của tôi thậm chí cố gắng nhìn vào file lật đổ. Tuy nhiên, tôi cần chúng. Đó là một phần của crap chính trị. Tôi phải cho thấy rằng mọi tập tin đã được sao chép ... wheter nó đã được quét hay không.
Và tôi nhận ra các nghi phạm thông thường là gì đối với File.Delete. Tôi nhận ra những gì UnauthorizedAccessException có nghĩa là. Tôi không có quyền truy cập. Đó là không có trí tuệ. Nhưng tôi vừa sao chép tập tin. Làm thế nào tôi có thể NOT có quyền truy cập vào tệp?
* Cập nhật 3 * Câu trả lời nằm trong cờ "chỉ đọc". Dưới đây là đoạn code tôi sử dụng để sửa chữa nó:
foreach (string file in ListOfFilesToScan)
{
string newFile = file.Replace(oldRootPath, tempPath);
// This works just fine.
File.Copy(file, newFile);
//// NEW CODE ////
// Clear any "Read-Only" flags
FileInfo fi3 = new FileInfo(fn);
if ((fi3.Attributes & FileAttributes.ReadOnly) == FileAttributes.ReadOnly)
{
fi3.Attributes = (FileAttributes)(Convert.ToInt32(fi3.Attributes) - Convert.ToInt32(FileAttributes.ReadOnly));
}
tmpCacheManifest.add(newFile);
}
// ... do some stuff to the cache to verify what I need.
Ngoại lệ là gì? Có thể có một khóa tập tin. –
File.Delete có thể ném ít nhất bảy loại ngoại lệ khác nhau. Bạn đang nhận được cái nào? –
@Roboto, Ý của bạn là: WTE? TCBAFL? –