C# 在c中写入子文件夹#

C# 在c中写入子文件夹#,c#,directory,C#,Directory,我在试图创建的文件夹中写入文本文件时遇到了一点问题。它说我无法访问路径“C:\” 谁能告诉我为什么以及如何修复它?谢谢 string file_name = Environment.CurrentDirectory; file_name += @"\."; file_name = (string)combobox1.SelectedValue; file_name += @"\."; file_name += (string)combobox2.SelectedV

我在试图创建的文件夹中写入文本文件时遇到了一点问题。它说我无法访问路径“C:\”

谁能告诉我为什么以及如何修复它?谢谢

string file_name = Environment.CurrentDirectory;
    file_name += @"\.";
    file_name = (string)combobox1.SelectedValue;
    file_name += @"\.";
    file_name += (string)combobox2.SelectedValue;
    TextWriter name = new StreamWriter(file_name);
编辑:这是修订后的新代码

var location = Path.Combine(Environment.CurrentDirectory, (string)combobox1.SelectedItem);
Directory.CreateDirectory(location);
var path = Path.Combine(location, combobox2.SelectedItem);
TextWriter name = new StreamWriter(path, true);
我的目标是将文本文件写入\\.txt


谁能告诉我怎么做?谢谢

是否已检查文件名的值以确保路径有效

您已经错过了第3行的连接

string file_name = Environment.CurrentDirectory;
    file_name += @"\.";
    file_name += (string)combobox1.SelectedValue;  // <--
    file_name += @"\.";
    file_name += (string)combobox2.SelectedValue;
    TextWriter name = new StreamWriter(file_name);
string file\u name=Environment.CurrentDirectory;
文件名+=@“\”;

文件名+=(字符串)combobox1.SelectedValue;// 是否已检查文件名的值以确保路径有效

您已经错过了第3行的连接

string file_name = Environment.CurrentDirectory;
    file_name += @"\.";
    file_name += (string)combobox1.SelectedValue;  // <--
    file_name += @"\.";
    file_name += (string)combobox2.SelectedValue;
    TextWriter name = new StreamWriter(file_name);
string file\u name=Environment.CurrentDirectory;
文件名+=@“\”;

文件名+=(字符串)combobox1.SelectedValue;// 运行应用程序的帐户在您试图将文件保存到的位置没有写入权限

本文将介绍如何解决此问题:


运行应用程序的帐户在您试图保存文件的位置没有写入权限

本文将介绍如何解决此问题:

您应该使用:

如果此时仍不起作用,至少您会知道这实际上是权限/存在性等问题,而不是构建文件名的方式问题。

您应该使用:


如果在那一点上它仍然不起作用,至少你会知道这实际上是一个权限/存在性/等问题,而不是你构建文件名的方式问题。

这里的解决方案是其他人所说的结合

正如已经指出的,这一行:

file_name = (string)combobox1.SelectedValue;
错误地执行赋值(
=
)而不是串联(
+=
)。这意味着如果
comboxbo1.SelectedValue
null
,则您的路径将变为
\.
,这是驱动器的根目录

您需要记住,
SelectedValue
null
是合法的,因为组合框可以有空选择。您需要处理这种情况,可能需要禁用保存功能,直到组合框具有有效的选择


这不是权限的真正问题;您不太可能真正需要或打算写入根目录,这就是为什么您没有被授予该权限的原因。

这里的解决方案是将其他人所说的结合起来

正如已经指出的,这一行:

file_name = (string)combobox1.SelectedValue;
错误地执行赋值(
=
)而不是串联(
+=
)。这意味着如果
comboxbo1.SelectedValue
null
,则您的路径将变为
\.
,这是驱动器的根目录

您需要记住,
SelectedValue
null
是合法的,因为组合框可以有空选择。您需要处理这种情况,可能需要禁用保存功能,直到组合框具有有效的选择



这不是权限的真正问题;您不太可能真正需要或打算写入根目录,这就是为什么您没有被授予该权限的原因。

如何检查?有没有更简单的方法让它先写入当前目录,然后再写入其上的子文件夹?例如“.\new folder\text.txtI如何检查?是否有更简单的方法使其写入当前目录,然后再写入其上的子文件夹?例如“.\new folder\text.txtI尝试了此操作,但出现以下错误:参数NullException未处理。这是为什么?我如何设置权限/存在问题?@Alex由于传递的参数之一是
null
,所以出现了异常。那可能是你的问题。在线路上设置一个断点,检查哪个断点,然后修复它!嗯,我的两个组合框似乎都是空的,但我不知道为什么。我应该使用其他东西而不是SelectedValue吗?没关系,我使用了SelectedText,它消除了错误。是这样吗?当我调试它时,它现在只显示“”而不是null。可以吗?但是现在我得到了权限错误。是否有代码可以编写以使其可写?我尝试了此操作,但出现了以下错误:参数NullException未处理。这是为什么?我如何设置权限/存在问题?@Alex由于传递的参数之一是
null
,所以出现了异常。那可能是你的问题。在线路上设置一个断点,检查哪个断点,然后修复它!嗯,我的两个组合框似乎都是空的,但我不知道为什么。我应该使用其他东西而不是SelectedValue吗?没关系,我使用了SelectedText,它消除了错误。是这样吗?当我调试它时,它现在只显示“”而不是null。可以吗?但是现在我得到了权限错误。有没有代码我可以写,使其可写?我已经实现了我的代码,从那时起,以适应我的代码,使它现在进入正确的目录。但是,我得到一个DirectoryNotFoundException是未处理的错误。我是不是创建了错误的文件夹?代码中没有创建目录的内容。如果在创建文件之前需要确保目录存在,请使用directory.CreateDirectory()。此方法将自动创建任何必要的子目录。好的,因此我遇到了一个问题,除了有一个UnauthorizedAccessException未经处理的错误之外,它正在创建两个文件夹,因此我从combine语句中删除了第二个combobox。我的目标是在\\text.txt中创建一个文本文件创建一个变量来保存文件位置:var location=Path.Combine(Environment.CurrentDirectory,(string)combobox1.SelectedValue)。创建另一个变量来保存文件路径,即locat