您好我必须在另一名学生之后完成学校项目。 并且在整个程序中他使用绝对路径来存档,问题是它只能在一台计算机上运行。因为这条路是独一无二的。 有人能告诉我如何用文件名替换这条路径?
string content = File.ReadAllText(filePath);
this.DocumentXml = XDocument.Parse(content);
this.xmlInfo = XDocument.Parse(content);
var groups = this.DocumentXml.Root.Elements("group");
foreach (var group in groups)
{
checkedListBox1.Items.Add(group.Attribute("name").Value);
}
// Adding data from your DNSFile to dataGridView1
hostsDataSet.Clear();
hostsDataSet.ReadXml(filePath);
dataGridView1.DataSource = hostsDataSet;
dataGridView1.DataMember = "item";
在这种情况下" filepath"是带有绝对路径的文本文件,包含他使用的文件。 你能帮助我吗?
这是我使用Application.LocalUserAppDataPath
创建的文件的完整路径: C:\ Users \ praktykant1 \ AppData \ Local \ WindowsFormsApplication1 \ WindowsFormsApplication1 \ 1.0.0.0 \ test.txt
在我的情况下的问题是我必须创建我在AppData / Local文件夹中的程序中使用的文件。所以在每台计算机上路径都是不同的。这个程序必须适用于每台计算机。我只是初学者,所以我在这个主题上是绿色的。
答案 0 :(得分:1)
这正是配置文件用于...可能执行相同代码的环境之间的差异。
据推测,问题是filePath
是硬编码的,是吗?像这样的东西?:
var filePath = @"c:\some\path\to\a\file.xml";
相反,请将其设为配置值。首先在App.config
节点中向Web.config
(或appSettings
,如果这是一个Web应用程序)添加一个条目:
<appSettings>
<add key="filePath" value="c:\some\path\to\a\file.xml" />
<!-- any other settings already in place... -->
</appSettings>
然后使用ConfigurationManager
获取该设置。 (您可能需要在项目中添加对System.Configuration
程序集的引用。)像这样:
var filePath = ConfigurationManager.AppSettings["filePath"];
你也可能会执行一些错误检查,以确保那里有一个值(确保filePath
不会以空字符串或空字符串结束,即确保),确保文件存在等等。
此时,您可以更改配置文件中的值,而无需重新编译代码。因此,任何新环境都可以设置配置设置并使用应用程序。
答案 1 :(得分:0)
如果将变量filepath
设置为文件名 - 它将在启动可执行文件的目录中查找此文件(默认情况下)。这称为工作目录,您可以找到如何更改工作目录online。
如果您想避免使用完整(或相对)路径并只使用文件名 - 希望它位于该工作目录中。
答案 2 :(得分:0)
要获取路径的文件名,只需执行此操作即可。 例如,如果你的路径是&#34; C:\ hello.txt&#34;,那就变成&#34; hello.txt&#34;
string fileName = Path.GetFileName(filepath);
如果您不希望文件名具有任何扩展名
string fileNameNoEx = Path.GetFileNameWithoutExtension(fileName);
这样就变成了&#34;你好&#34;
答案 3 :(得分:0)
如果是ASP.net,你可以这样做,
if(FileUploadControl.HasFile)
{
try
{
string filename = Path.GetFileName(FileUploadControl.FileName);
FileUploadControl.SaveAs(Server.MapPath("~/") + filename);
StatusLabel.Text = "Upload status: File uploaded!";
}
catch(Exception ex)
{
StatusLabel.Text = "Upload status: The file could not be uploaded. The following error occured: " + ex.Message;
}
}