làm cách nào tôi có thể tạo Ổ đĩa cứng ảo (như Z :) lưu trữ tệp của nó trên ổ cứng vật lý (Giống như C: \ Files).tạo ổ cứng ảo
Trả lời
Dưới đây là mã C# để làm điều này trực tiếp: sử dụng
using System;
using System.Text;
using System.ComponentModel;
using System.Runtime.InteropServices;
static class Subst {
public static void MapDrive(char letter, string path) {
if (!DefineDosDevice(0, devName(letter), path))
throw new Win32Exception();
}
public static void UnmapDrive(char letter) {
if (!DefineDosDevice(2, devName(letter), null))
throw new Win32Exception();
}
public static string GetDriveMapping(char letter) {
var sb = new StringBuilder(259);
if (QueryDosDevice(devName(letter), sb, sb.Capacity) == 0) {
// Return empty string if the drive is not mapped
int err = Marshal.GetLastWin32Error();
if (err == 2) return "";
throw new Win32Exception();
}
return sb.ToString().Substring(4);
}
private static string devName(char letter) {
return new string(char.ToUpper(letter), 1) + ":";
}
[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern bool DefineDosDevice(int flags, string devname, string path);
[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern int QueryDosDevice(string devname, StringBuilder buffer, int bufSize);
}
mẫu:
Subst.MapDrive('z', @"c:\temp");
Console.WriteLine(Subst.GetDriveMapping('z'));
Subst.UnmapDrive('z');
có hoạt động trong cửa sổ 10 không? không thể làm cho nó hoạt động – Kubi
Nếu người dùng vượt qua ký tự ổ đĩa cứng, 'sb' sẽ chứa một cái gì đó như' \ Device \ HarddiskVolume2' và 'Substring (4)' về cơ bản sẽ trả về rác. Tôi khuyên bạn nên đảm bảo 'sb' bắt đầu bằng' @ "\ ?? \" 'trước khi trả về' Chuỗi con (4) '. Nếu nó bắt đầu với một cái gì đó khác, '" "' (cùng một điều bạn trở lại nếu ổ đĩa không tồn tại ở tất cả) có vẻ như một giá trị hợp lý để trở về - không có ổ đĩa SUBSTed để có được con đường của. –
@Hans Passant: mã trên sẽ không hiển thị bất kỳ hiệu ứng nào khi ứng dụng chạy dưới quyền quản trị viên. tức là 'Run As Admin' đã thử nó trong windows 8 và windows 10, tuy nhiên, nếu không có quyền admin thì mã sẽ hiển thị kết quả mong đợi, một câu hỏi được đăng liên quan đến chủ đề ở đây, đánh giá cao nếu bạn xem https: // stackoverflow .com/q/46663368/323339 –
Bạn có thể sử dụng lệnh subst. Sử dụng System.Diagnostic.Process để chạy subst.exe với các tham số mong muốn.
Đây là cú pháp lệnh:
Cú pháp
Associates một con đường với một ký tự ổ đĩa.
SUBST [drive1: [drive2:]path] SUBST drive1: /D
drive1: Chỉ định ổ đĩa ảo đến mà bạn muốn chỉ định đường dẫn.
Đường dẫn [drive2:] Chỉ định ổ đĩa vật lý và đường dẫn bạn muốn gán cho ổ đĩa ảo .
/D Xóa ổ đĩa thay thế (ảo).
Nhập SUBST không có tham số để hiển thị danh sách ổ đĩa ảo hiện tại.list của các ổ đĩa ảo hiện tại.
Để bạn biết, điều này có thể là một trong những phương pháp dễ nhất. Tuy nhiên, khởi động lại máy tính sẽ hoàn nguyên việc gắn kết và loại bỏ ổ đĩa ảo và đặt mọi thứ trở lại bình thường. Nếu bạn thêm mục nhập vào tệp autoexec.bat, ổ đĩa ảo có thể được giữ lại trong suốt quá trình khởi động lại. –
@Ranhiru, bạn nói đúng, ổ đĩa ảo sẽ được hoàn nguyên trên mỗi lần khởi động. Một giải pháp dễ dàng là chương trình sẽ gọi lệnh subst bất cứ khi nào nó bắt đầu. –
Trong Windows 7/64, cách tốt nhất để thực hiện "subst" vĩnh viễn sẽ được tất cả các quy trình xem là gì? – supercat
Thực hiện theo cùng cách bạn sẽ ánh xạ ổ đĩa mạng, nhưng trỏ nó vào một thư mục trên máy hiện tại. Điều duy nhất bạn phải làm đặc biệt là sử dụng đường dẫn UNC cho thư mục cục bộ.
Đây là một helper class
Không chắc làm thế nào để làm điều này trong C# nhưng điều này sẽ giúp bạn:
Ive chỉ được thử nghiệm này và hoạt động hoàn hảo
Trên máy tính của tôi có 1 ổ cứng phát minh ra vào 2, C:
& D:
, đi vào D:
tôi có thư mục có tên Sao lưu, nếu bạn nhấp chuột phải vào thư mục và nhấp vào tab Share
, bạn sẽ thấy Network Path
.. Trên máy của tôi có vẻ như \\Robert-home\backup
sau đó tôi tiến hành CMD
và thực hiện lệnh sau
NET USE Z: \\Robert-home\backup
Witch bản đồ thành công các nội dung của D:\backup
để Z:
Im chắc chắn rằng bạn có thể hoàn thành như một nhiệm vụ trong C# ..
Tôi thường sử dụng phương pháp này tại nơi làm việc để hỗ trợ khách hàng để chuyển và sao lưu các tập tin trước khi bàn giao tiếp mới được cấp cho chúng.
- 1. Ổ cứng Heap Java
- 2. Cách tạo ổ đĩa CD ảo trên Mac OS X
- 3. C#: Tạo một ổ đĩa ảo trong Máy tính
- 4. Chống phân mảnh đĩa cứng ảo (.vhd)?
- 5. Tạo cổng MIDI ảo
- 6. Tạo thiết bị USB ảo
- 7. Đọc các Ổ đĩa cứng trong C++ trên Linux
- 8. Xóa dung lượng trống trên ổ đĩa cứng bằng C#
- 9. Lấy nhiệt độ ổ cứng bằng cách sử dụng Python
- 10. Làm cách nào để nhận được số ổ đĩa cứng của ổ USB trên OS X?
- 11. Tăng ổ cắm asio: cách nhanh nhất để đọc tệp từ ổ đĩa cứng?
- 12. Làm cách nào để phát hiện xem có ổ đĩa cụ thể nào là ổ cứng không?
- 13. Làm thế nào để bạn phát hiện các ký tự ổ đĩa cứng chính như ổ C:?
- 14. Làm cách nào để lưu trữ một đối tượng trên ổ cứng?
- 15. Cách tạo ổ cắm Boost.Asio từ ổ cắm gốc?
- 16. Tạo liên kết cứng trong java
- 17. Bằng mã, làm thế nào tôi có thể gửi một ổ đĩa cứng để ngủ
- 18. Làm thế nào để mảng đầu ra tăng gấp đôi vào ổ cứng?
- 19. Tạo đường dẫn tập tin ảo từ dòng
- 20. Ổ cứng lai có cải thiện thời gian biên dịch Visual Studio không?
- 21. Công cụ để hiển thị các quy trình ghi vào ổ cứng?
- 22. Đọc một tập tin từ ổ cứng trong trình mô phỏng iPhone
- 23. Cách sử dụng Bố cục nội dung để buộc tệp tải xuống ổ cứng?
- 24. Ổ cứng có tồn tại trong két an toàn chống cháy không?
- 25. C# getdrives với loại cố định nhưng không có ổ cứng USB?
- 26. Ổ cứng LoadingCache - cách xử lý các khóa không tồn tại trong cửa hàng sao lưu
- 27. Lấy kích thước cụm của một ổ đĩa cứng (thông qua mã)
- 28. Làm thế nào để ngăn chặn chương trình Windows khỏi ổ đĩa cứng quay xuống?
- 29. Liệt kê tất cả các ổ cứng trong hệ thống linux
- 30. Ổ cứng 'open_uri' có đóng đáng tin cậy của Ruby sau khi đọc hay không?
Bằng cách viết một trình điều khiển thiết bị. Một cái gì đó bạn không thể làm với C#. – dtb
Không phải chuyên gia nhưng có vẻ như bạn cần phải làm việc ở cấp hạt nhân với DDK. – LatinSuD
@dtv & LatinSuD, điều này chắc chắn không yêu cầu tạo hệ thống tệp ảo, bạn có thể dễ dàng ánh xạ ổ đĩa đến đường dẫn cục bộ. – mikerobi