You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用.NET DiscUtils向VHD写入文件报错:找不到文件

解决.NET DiscUtils写入VHD时的FileNotFoundException问题

我来帮你排查下代码里的几个关键问题,这些问题直接导致了FileNotFoundException以及潜在的写入权限异常:

核心问题分析

  • VHD打开权限不足:你用FileAccess.Read打开VHD,但要写入内容必须使用FileAccess.ReadWrite,否则连创建文件的权限都没有,后续操作自然失败。
  • 文件路径错误:调用OpenFile时传入vhdbNtfs.Root.FullName,这是根目录的路径,不是你要创建的Win.exe文件路径。DiscUtils会尝试把根目录当作文件打开,肯定找不到目标。
  • 文件系统类型混淆:代码里定义了FatFileSystem但变量名是vhdbNtfs,如果你的VHD分区是NTFS格式,必须用NtfsFileSystem,类型不匹配会引发文件系统操作异常。
  • C#语法误用:__InlineAssignHelper是VB.NET的语法,C#里直接在while循环中赋值并判断即可,不需要这个辅助方法。
  • 本地文件路径风险:"Win.exe"是相对路径,如果该文件不在程序运行的当前工作目录下,会导致本地文件读取失败,间接引发后续问题。

修正后的完整代码

// 定义合理的缓冲区大小,比如4096
const int BUFFERLENGTH = 4096;
string vhd_filename = "你的VHD文件绝对路径";
// 本地文件建议用绝对路径,避免找不到
string localFilePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Win.exe");

using (VirtualDisk vhdx = DiscUtils.Vhd.Disk.OpenDisk(vhd_filename, FileAccess.ReadWrite))
{
    // 根据你的分区格式选择对应文件系统,这里假设是NTFS
    using (NtfsFileSystem vhdNtfs = new NtfsFileSystem(vhdx.Partitions[0].Open()))
    {
        string vhdFilePath = "Win.exe"; // 直接指定VHD根目录下要创建的文件名

        // 读取本地文件
        using (FileStream localFileStream = new FileStream(localFilePath, FileMode.Open, FileAccess.Read))
        {
            // 在VHD中创建并写入文件
            using (Stream vhdFileStream = vhdNtfs.OpenFile(vhdFilePath, FileMode.Create, FileAccess.Write))
            {
                byte[] buffer = new byte[BUFFERLENGTH];
                int bytesRead;
                while ((bytesRead = localFileStream.Read(buffer, 0, BUFFERLENGTH)) != 0)
                {
                    vhdFileStream.Write(buffer, 0, bytesRead);
                }
            }
        }
    }
}

额外注意事项

  • 确认Partitions[0]是你要操作的目标分区,避免选错分区导致文件系统无法识别。
  • 如果你的VHD是FAT格式,把NtfsFileSystem换成FatFileSystem即可,保持类型和分区格式匹配。
  • 运行程序时需要足够权限,尤其是操作系统目录下的VHD文件,可能需要以管理员身份启动程序。

内容的提问来源于stack exchange,提问作者ErolCimen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:50:12