机器人说:System.IO.DirectoryNotFoundException:找不到路径的一部分

问题描述 投票:0回答:1

我有一个 Microsoft bot 框架聊天机器人,当我在本地运行它时,它工作正常,一切都很顺利,但是当我将它发布到 Azure 并尝试在网络聊天中测试它时,出现错误,如下图所示,错误是机器人无法访问项目文件中的文件。

private async Task<DialogTurnResult> FullName(WaterfallStepContext stepContext, CancellationToken cancellationToken)
    {
        var activity = stepContext.Context.Activity.CreateReply("");
        activity.SuggestedActions = new SuggestedActions();
        
        var text = stepContext.Context.Activity.Text;
        
        if (text != "القائمة الرئيسية")
        {
            try
            {
                File.WriteAllText(@"OtherFiles/Appointment.txt",String.Empty);
                using (StreamWriter writer = new StreamWriter(@"OtherFiles\Appointment.txt",true))
                {                    
                    writer.Write(string.Empty);
                    writer.WriteLine(text);
                }
            }
            catch (Exception e)
            {
                await stepContext.Context.SendActivityAsync(e.ToString());
            }
            await stepContext.Context.SendActivityAsync("ادخل الاسم كامل لو سمحت");
        }
        return await stepContext.PromptAsync(Actions.Prompt, new PromptOptions()
            {
                Prompt = activity
            });
       
    }

enter image description here

python azure botframework chatbot
1个回答
0
投票
如果文件不存在,C# 中的

File.WriteAllText

StreamWriter
 类将创建该文件。但是,如果路径中指定的目录不存在,它们将引发异常。因此,在尝试写入文件之前,您需要确保目录(在您的情况下是
OtherFiles
)存在。

错误消息告诉我们,机器人在 Azure 上运行时无法在

Appointment.txt

 目录中找到文件 
OtherFiles

这可能是由于本地环境和 Azure 环境之间的文件系统存在差异。

您可以尝试以下建议吗?

  1. 检查文件路径:确保文件路径正确,并且Azure环境中存在OtherFiles

    目录和
    Appointment.txt
    文件。您可能需要手动上传这些或将它们包含在您的部署包中。

  2. 使用相对路径:不使用硬编码路径,而是使用相对路径使代码更具可移植性。

    例如:

    string path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "OtherFiles", "Appointment.txt");
    
    

我想我的建议是修改您的代码以动态检查目录是否存在,如果不存在则创建它。这可确保您的代码足够强大,可以处理本地和 Azure 环境。

示例:

string dirPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "OtherFiles"); string filePath = Path.Combine(dirPath, "Appointment.txt"); // Check if the directory exists, create if not if (!Directory.Exists(dirPath)) { Directory.CreateDirectory(dirPath); } File.WriteAllText(filePath, String.Empty); using (StreamWriter writer = new StreamWriter(filePath, true)) { writer.Write(string.Empty); writer.WriteLine(text); }
    
© www.soinside.com 2019 - 2024. All rights reserved.