4

我正在 VS 2008 中开发 C# Web 应用程序。我让用户选择一个输入文件,然后将文件路径存储在一个字符串变量中。但是,它将此路径存储为"C:\\folder\\...". 所以我的问题是如何将此文件路径转换为单个“\”?

谢谢你们所有的帮助!请原谅我,因为我是 ASP.NET 开发的新手。这是我在上下文中的更多代码。首先我想看看目录是否存在。如果我检查文件是否存在,我想我不必检查这个。但这应该仍然有效吗?目前我的“路径”字符串变量没有按照我需要的方式显示。我不知道如何制定这个声明。最终我想执行 ReadAllText 语句(见最后一行)。

protected void btnAppend_Click(object sender, EventArgs e)
{
    string fullpath = Page.Request.PhysicalPath;
    string fullPath2 = fullpath.Replace(@"\\", @"\");

    if (!Directory.Exists(fullpath2))
    {
    string msg = "<h1>The upload path doesn't exist: {0}</h1>";
    Response.Write(String.Format(msg, fullpath2));
    Response.End();
}
    string path = "@" + fullpath2 + uploadFile.PostedFile.FileName; 

    if (File.Exists(path))
    {
        // Create a file to write to.
        try
        {
            StreamReader sr = new StreamReader(path);
            string s = "";
            while(sr.Peek() > 0)
                s = sr.ReadLine();
            sr.Close();
        }
        catch (IOException exc)
        {
            Console.WriteLine(exc.Message + "Cannot open file.");
            return; 
        }
    }

    if (uploadFile.PostedFile.ContentLength > 0)
    {

        inputfile = System.IO.File.ReadAllText(path);
4

3 回答 3

6

你确定问题是反斜杠吗?反斜杠是字符串中的转义字符,因此如果要将其添加到字符串中,则必须将其键入为“\\”而不是“\”。(如果您不使用@)请注意,调试器经常以您将其放入代码中的方式显示字符串,使用转义字符,而不是直接显示。

根据文档, Page.Request.PhysicalPath 返回您所在的特定文件的路径,而不是目录。Directory.Exists 仅在您给它一个目录而不是文件时才为真。File.Exists() 是否返回 true?

于 2010-04-14T22:07:50.967 回答
5

首先,调用对;fullpath.Replace()没有任何作用。fullpath返回一个新字符串。此外,当您的字符串文字中有一个 \(反斜杠)时,您需要告诉编译器您没有尝试使用转义序列:

fullpath = fullpath.Replace(@"\\", @"\"); 

意思是“@请按字面意思(逐字)对待这个字符串”。换句话说,“当我说反斜杠时,我的意思是反斜杠!”

请参阅http://msdn.microsoft.com/en-us/library/362314fe.aspx

编辑:

正如 LeBleu 提到的,您在完整的文件路径上调用 Directory.Exists() 。这行不通;您需要从路径中提取目录部分。试试这个:

if (!Directory.Exists(Path.GetDirectoryName(fullpath)))
{
     ...
}
于 2010-04-14T21:58:19.630 回答
0

您可能需要考虑将其替换为 Path.DirectorySeparatorChar 而不是 \ 以防有一天您的代码最终可能会在不同的平台上运行(mono.net 允许它在 linux 上运行,或者更有可能最终会在一些奇怪的移动平台上)

于 2010-04-14T22:02:09.390 回答