C# (Unity)DirectoryNotFoundException-如何在外部文件夹中保存屏幕截图?

C# (Unity)DirectoryNotFoundException-如何在外部文件夹中保存屏幕截图?,c#,unity3d,file-io,C#,Unity3d,File Io,我想要的是在外部文件夹上编写屏幕截图,但它失败了,出现DirectoryNotFoundException错误 由于安全问题,Unity Project无法在其目录文件夹中写入映像文件。所以,我尝试使用外部路径保存屏幕截图,但unity editor从其项目目录中搜索路径,而不是从根文件夹 比如说,, 项目文件夹:C:\unity\u Project1\ 我想保存屏幕快照的位置:C:\unity\Screenshot\ 然后 错误消息:DirectoryNotFoundException:找不到

我想要的是在外部文件夹上编写屏幕截图,但它失败了,出现
DirectoryNotFoundException
错误

由于安全问题,Unity Project无法在其目录文件夹中写入映像文件。所以,我尝试使用外部路径保存屏幕截图,但unity editor从其项目目录中搜索路径,而不是从根文件夹

比如说,,
项目文件夹:
C:\unity\u Project1\

我想保存屏幕快照的位置:
C:\unity\Screenshot\

然后

错误消息:DirectoryNotFoundException:找不到路径“C:\Unity\u Projects1\C\Unity\Screenshot\20210203121329.png”的一部分

这是我的密码

IEnumerator Rendering ()
{
    yield return new WaitForEndOfFrame();

    byte[] imgByte;
    string path = @"C:\Unity\Screenshot\" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".png";
    path = path.Replace(":", "");
    Texture2D texture = new Texture2D(Screen.width, Screen.height, TextureFormat.RGB24, false);
    texture.ReadPixels(new Rect(0, 0, Screen.width, Screen.height), 0, 0, false);
    texture.Apply();

    imgByte = texture.EncodeToPNG();
    System.IO.File.WriteAllBytes(path, imgByte);
}

有什么问题?如何解决呢?

从整个路径中删除
后(出于未知原因),将
C:\…
转换为
C\…
,从而将假定硬盘驱动器的根目录转换为名为
C
的普通文件夹

这将使
File.writealBytes
自动解释并将其用作当前执行目录(Unity项目文件夹)的起点

并添加格式错误的路径

C\Unity\Screenshot\20210203121329.png
作为一个相对的路径,正如您在错误消息中看到的,该路径会导致

C:\Unity_Projects1\C\Unity\Screenshot\20210203121329.png
这显然是错误的


您自定义的
DateTime.Now.ToString(“yyyyMMddHHmmss”)
已经生成了一个没有任何
的字符串,因此只需使用

var folderPath=Path.Combine(“C:\\”、“Unity”、“Screenshot”);
var filePath=Path.Combine(folderPath,DateTime.Now.ToString(“yyyyMMddHHmmss”)+“.png”);
//创建文件夹和子文件夹,除非它们已存在
CreateDiectory(folderPath);
writealBytes(文件路径,imgByte);

然后,正如其他人一般所建议的,您可能仍然没有权限,例如,直接在
C:\
上创建一个新文件夹


<>您可能想考虑将文件存储在(或在UnTyEngestto to中测试)

,这会在编辑器想要实现这个过程或根据目标平台创建项目时产生差异。请看一看。。。不要在整个路径上替换“:”。因为你没有得到你所想的。它将成为“C\Unity\Screenshot”。
C:\Unity_Projects1\C\Unity\Screenshot\20210203121329.png