2012-07-06 49 views
11

Tôi đã tạo một ứng dụng nhỏ đang chạy trên Win7-PC. Tất cả điều đó là kiểm tra nội dung của ổ đĩa mạng lúc 1:00 giờ sáng (và so sánh nó với một thư mục trên ổ cứng cục bộ), và nếu có sự khác biệt, hãy sao chép sự khác biệt vào thư mục này .Ứng dụng nói rằng ổ đĩa mạng không tồn tại, nhưng được tìm thấy bằng cách sử dụng OpenFileDialog

Vấn đề là, đôi khi nó không thể tìm thấy ổ đĩa mạng.

Khi ứng dụng khởi động, ổ đĩa mạng được tìm thấy bằng cách sử dụng nút trên ứng dụng khởi động OpenFileDialog và ký tự ổ đĩa kết quả được đưa vào hộp văn bản bên cạnh nút. Từ thời điểm đó nó chỉ nên chạy một mình. PC không bao giờ bị tắt.

Khi không thể tìm thấy ổ đĩa mạng, tôi có thể nhấn nút trên cùng một ứng dụng, chọn ổ đĩa trong OpenFileDialog (ký tự ổ đĩa không bao giờ thay đổi) và ứng dụng sẽ chạy hoàn hảo trong một cặp vợ chồng trong các ngày. Sau đó, vấn đề xảy ra một lần nữa.

Câu hỏi đặt ra là: Tại sao ổ đĩa mạng được truy cập thông qua OpenFileDialog trên ứng dụng của tôi, nhưng ứng dụng của tôi có thể không?

Ứng dụng của tôi bắt đầu sao chép quá trình sử dụng chức năng này (được gọi với "Y: \") để xác định xem ổ đĩa có mặt hay không:

public bool fn_drive_exists(string par_string) 
    { 
     DirectoryInfo di_dir = new DirectoryInfo(par_string); 
     if (di_dir.Exists) 
     { 
      return true; 
     } 

     return false; 
    } 

... và đôi khi nó trả về một False, cho đến khi tôi "đánh thức nó" bằng cách sử dụng OpenFileDialog.

OpenFileDialog làm gì, ứng dụng của tôi không?

+3

Làm thế nào về bạn vượt qua trong '\\ server \ sharedFolder' thay vì tài xế mạng được ánh xạ 'Y : '? Liệu nó có cùng một vấn đề? –

+0

Ngoài ra, hãy thử đặt một số thử lại logic xung quanh fn_drive_exists (có lẽ vòng lặp 5 lần với 6 giây chậm trễ mỗi vòng lặp). –

+1

Âm thanh như đường dẫn UNC sẽ hoạt động trong trường hợp của bạn. Xem [SO post] này (http://stackoverflow.com/questions/133660/how-can-i-access-a-mapped-network-drive-with-system-io-directoryinfo) –

Trả lời

1

Theo điều này SO post, sự cố sẽ biến mất nếu bạn sử dụng đường dẫn UNC thay vì ổ đĩa mạng được ánh xạ.

0

Nếu điểm đến của bạn có một địa chỉ IP tĩnh, tôi đề nghị bạn sử dụng địa chỉ IP thay cho tên miền với ổ đĩa mạng

0

This SO post mô tả một kịch bản tương tự như những gì bạn đã mô tả.

Một trong các liên kết được đăng để trả lời câu hỏi đó dẫn tôi đến this MSDN article, cung cấp nhiều lý do khác nhau khiến người dùng gặp phải lỗi khi cố gắng truy cập ổ đĩa mạng được chia sẻ bằng cách sử dụng ký tự ổ đĩa được ánh xạ.

Đề xuất của Microsoft (xem bên dưới) là chỉ cần sử dụng đường dẫn UNC.

Dịch vụ (hoặc bất kỳ quy trình nào chạy trong ngữ cảnh bảo mật khác) phải truy cập tài nguyên từ xa nên sử dụng tên Công ước đặt tên chung (UNC) để truy cập tài nguyên.

Để trả lời câu hỏi thực tế của bạn cụ thể hơn, liên quan đến lý do tại sao đột nhiên không thể truy cập vào mạng, tôi dự đoán chia sẻ mạng bị ngắt kết nối bởi Windows do thời gian chờ không hoạt động, như được thảo luận trong KB297684. Bất kỳ nỗ lực nào để truy cập vào ổ đĩa bị ngắt kết nối sẽ được đáp ứng với một sự chờ đợi nhỏ vì kết nối với chia sẻ mạng được thiết lập lại, điều này có thể là nguyên nhân gây ra sự cố của bạn.

Để kiểm tra lý thuyết này, hãy thử viết một số dữ liệu vào tệp trên ổ đĩa mạng trong khoảng thời gian tương đối ngắn (mỗi 10 phút, có lẽ?) Để thử và thuyết phục Windows mà ổ đĩa vẫn hoạt động.

0

Bạn cũng có thể thử sử dụng:

System.IO.Directory.Exists(par_string); 

thay vì viết phương pháp riêng của bạn cho những điều tương tự. Tôi mong đợi một phương pháp khung để có thể "đánh thức" ổ đĩa mạng. Lưu ý: Phương pháp cũng hoạt động cho đường dẫn UNC (chẳng hạn như \\<server name or IP address>\<shared folder>)

0

Giống như Harvey nói, sử dụng đường dẫn UNC để truy cập thư mục, ví dụ \\ server \ sharedfolder. Thay cho \\ server sử dụng tên của máy chủ. Máy tính của bạn có tên và máy chủ cũng vậy. Bạn cũng có thể sử dụng địa chỉ IP nếu bạn biết. Bạn thay thế \ sharedfolder với đường dẫn đến các tập tin. Một số ví dụ:

\\ AppsServer \ c $ \ Program Files (x86)

\\ FileServer1 \ d $ \ Users \ John \ My Documents

Các c $ đại diện cho ổ đĩa C là thư mục được chia sẻ. Nếu toàn bộ ổ đĩa không được chia sẻ, bạn sẽ cần phải chia sẻ thư mục cụ thể. Bạn có thể làm điều đó bằng cách đăng nhập vào máy chủ, kích chuột phải vào thư mục và chọn Properties. Sau đó, bạn chuyển đến tab Chia sẻ và chọn hộp kiểm Chia sẻ thư mục này. Nếu thư mục chia sẻ của bạn được gọi myShare, sau đó đường dẫn UNC của bạn để truy cập vào thư mục sẽ

\\ server \ myShare

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