我不是在寻找调用命令行实用程序的代码来完成此操作。我实际上想了解创建RAM磁盘所使用的API。
编辑
动机:我有一个第三方库,需要目录名称才能以某种方式处理该目录中的文件。我已将这些文件压缩在存档中。 我希望将存档提取到RAM磁盘中,并向第三方传递相应目录在RAM磁盘上的路径。如您所见,内存映射文件对我没有用。
ImDisk 是一款RAM磁盘应用程序,可以从内存扇区创建虚拟驱动器,并具有可从.NET调用的API。
class RamDisk
{
public const string MountPoint = "X:";
public void createRamDisk()
{
try
{
string initializeDisk = "imdisk -a ";
string imdiskSize = "-s 1024M ";
string mountPoint = "-m "+ MountPoint + " ";
ProcessStartInfo procStartInfo = new ProcessStartInfo();
procStartInfo.UseShellExecute = false;
procStartInfo.CreateNoWindow = true;
procStartInfo.FileName = "cmd";
procStartInfo.Arguments = "/C " + initializeDisk + imdiskSize + mountPoint;
Process.Start(procStartInfo);
formatRAMDisk();
}
catch (Exception objException)
{
Console.WriteLine("There was an Error, while trying to create a ramdisk! Do you have imdisk installed?");
Console.WriteLine(objException);
}
}
/**
* since the format option with imdisk doesn't seem to work
* use the fomat X: command via cmd
*
* as I would say in german:
* "Von hinten durch die Brust ins Auge"
* **/
private void formatRAMDisk(){
string cmdFormatHDD = "format " + MountPoint + "/Q /FS:NTFS";
SecureString password = new SecureString();
password.AppendChar('0');
password.AppendChar('8');
password.AppendChar('1');
password.AppendChar('5');
ProcessStartInfo formatRAMDiskProcess = new ProcessStartInfo();
formatRAMDiskProcess.UseShellExecute = false;
formatRAMDiskProcess.CreateNoWindow = true;
formatRAMDiskProcess.RedirectStandardInput = true;
formatRAMDiskProcess.FileName = "cmd";
formatRAMDiskProcess.Verb = "runas";
formatRAMDiskProcess.UserName = "Administrator";
formatRAMDiskProcess.Password = password;
formatRAMDiskProcess.Arguments = "/C " + cmdFormatHDD;
Process process = Process.Start(formatRAMDiskProcess);
sendCMDInput(process);
}
private void sendCMDInput(Process process)
{
StreamWriter inputWriter = process.StandardInput;
inputWriter.WriteLine("J");
inputWriter.Flush();
inputWriter.WriteLine("RAMDisk for valueable data");
inputWriter.Flush();
}
public string getMountPoint()
{
return MountPoint;
}
}
IMDisk
和SoftPerfect RAM Disk
两个软件,我更喜欢SoftPerfect
的。它的性能更好,只保留了100 MB分配中的0.2 MB,而IMDisk
则是10 MB,并且不需要用户账户控制(UAC)
提示来装载驱动器。两者都支持持久选项,但我没有测试过。 - Loathing您没有提及使用的语言,所以我的答案是c#:
内存映射文件包含虚拟内存中文件的内容。文件和内存空间之间的这种映射使应用程序(包括多个进程)能够通过直接读写内存来修改文件。从.NET Framework版本4开始,您可以使用托管代码以与本机Windows函数访问内存映射文件相同的方式访问内存映射文件,如MSDN库中的《Win32中管理内存映射文件》所述。
http://msdn.microsoft.com/zh-cn/library/dd997372.aspx
MemoryMappedFile MemoryMapped = MemoryMappedFile.CreateOrOpen(
new FileStream(@"C:\temp\Map.mp", FileMode.Create), // Any stream will do it
"MyMemMapFile", // Name
1024 * 1024, // Size in bytes
MemoryMappedFileAccess.ReadWrite); // Access type
// 创建地图视图并读取:
using (MemoryMappedViewAccessor FileMap = MemoryMapped.CreateViewAccessor())
{
Container NewContainer = new Container();
FileMap.Read<Container>(4, out NewContainer);
}
没有API可以直接创建RAM磁盘。您需要编写自己的设备驱动程序,将一个新的磁盘呈现给系统,并使该设备驱动程序与分配的内存一起工作。
编辑(在OP编辑后)
您正在尝试完成的操作通常使用“temp”目录完成,该目录应位于系统中可用的最快磁盘上。因此,已经拥有RAM磁盘的系统可能已经将其temp环境变量设置为指向RAM磁盘上的文件夹,而没有RAM磁盘的系统将简单地承受性能损失,这是他们的问题。
现在,如果由于某种原因您不能依赖系统上存在RAM磁盘,并且您绝对需要最快的性能,则我认为除了安装第三方(也许是免费下载的,甚至是开源的)RAM磁盘之外,别无选择,然后再卸载它。但那非常笨重。
CreateRAMDisk
函数。我认为你需要看一下如何创建一个驱动程序来管理磁盘,但是这个磁盘被重定向到RAM。然而,如果你只是想将文件重定向到内存,那么使用内存映射文件就可以完成任务。 - minjang