Visual Studio:给定路径不支持错误

本文关键字:路径 不支持 错误 Studio Visual | 更新日期: 2023-09-27 18:04:01

我正在编写一个程序,它将读取。lsp文件,读取它,部分理解并注释它,然后将编辑后的版本写回带有。txt附件的同一目录。我遇到的问题是,当我试图运行程序时,visual studio抛出"给定路径不支持"错误,这可能是由于我的一些疏忽。有人能发现我的代码中会导致文件路径无效的部分吗?

Stream myStream = null;
OpenFileDialog openFileDialog1 = new OpenFileDialog();
openFileDialog1.InitialDirectory = @"C:'Users'Administrator'Documents'All Code'clearspan-autocad-tools-development'Code'Lisp";
openFileDialog1.Filter = "LISP files (*.lsp)|*.lsp|All files (*.*)|*.*";
openFileDialog1.FilterIndex = 2;
openFileDialog1.RestoreDirectory = true;
string loc;
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
    try
    {
        if ((myStream = openFileDialog1.OpenFile()) != null)
        {
            using (myStream)
            {
                string[] lines = File.ReadAllLines(openFileDialog1.FileName);
                // saves the document with the same name of the LISP file, but with a .txt file extension
                using (StreamWriter sr = new StreamWriter(openFileDialog1.InitialDirectory + "''" + openFileDialog1.FileName.Substring(0, openFileDialog1.FileName.Length - 4) + ".txt"))
                {
                    foreach (string line in lines)
                    {
                        sr.WriteLine(line);
                    }
                }
            }
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show("Error: Could not read file from disk. Original error: " + ex.Message);
    }
}

编辑:filepath变量结果为"C:'Users'Administrator'Documents'All Code'clearspan-autocad-tools-development'Code'Lisp'heel.lsp"

此外,错误发生在我试图初始化StreamWriter并将文件路径调整为.txt文件的那一行。

Visual Studio:给定路径不支持错误

openFileDialog.FileName已经包含了该路径,因此将其与openFileDialog.InitialDirectory结合会使其成为类似C:'...'C:'...的无效路径。

使用

var txtFile= Path.ChangeExtension(openFileDialog1.FileName, ".txt");

openFileDialog.FileName返回文件的完整路径,而不仅仅是函数所暗示的文件名。

所以尝试将它与openFileDialog.InitialDirectory组合在一起会使字符串与您期望的不同

您可以使用change extension方法将其更改为输出的文件类型

var txtFile= Path.ChangeExtension(openFileDialog1。文件名,. txt),

你的代码有几个问题

错误处理:由于错误处理,您显然不知道错误发生在哪一行。在调试时不使用它可能会有用。

循环:您将整个输入文件拉入内存,然后遍历每一行来写入它。如果要处理的文件足够小,那就可以了,但是我会将foreach循环移到读取文件的块之外。

字符串解析:我建议将路径和文件名存储在变量中,而不是仅仅引用控件。这将使它更具可读性。此外,System.IO.Path.Combine()可以帮助构建路径,而不必担心字符串连接。

整体:

您可能希望将其重构为一个方法,并使用如下的签名:

void ProcessLispFile(string inputFile, string outputFile) { }