none
ArgumentException: 路徑中有不合法的字元 RRS feed

  • 問題

  • 請問為什麼透過 listBox1 清單取得的檔案路徑會「不合法」...

    string FilePath = listBox1.SelectedItem.ToString();
    MessageBox.Show(FilePath);        //顯示「D:\Data\123.txt」。

    try
    {
       StreamReader sr = new StreamReader(FilePath, Encoding.Unicode, true);        //這行就出錯了。
    }
    catch (ArgumentException ex)
    {
       MessageBox.Show(ex.Message);        //會顯示「路徑中有不合法的字元」的訊息。
    }

    若我不從 listBox1 清單取得,直接指派路徑給 Stream Reader 就能正常讀取。
    例如:
     string FilePath = @"D:\Data\123.txt";
     StreamReader sr = new StreamReader(FilePath, Encoding.Unicode, true);


    最後我發現是字元「.」原因所導致的,誰可以告訴我為什麼從 listBox1 清單取得字元「.」在檔案路徑字串中是不合法…?

    如果問的太膚淺請見諒…謝謝。



            另外,listBox1 內的清單是透過委派加入的,還是我委派有問題…?

            private void Form1_Load(object sender, EventArgs e)
            {
                FileSystemWatcher fsw = new FileSystemWatcher();
                fsw.Path = @"D:\Data\";//主要檢查路徑
                fsw.Filter = "*.txt";//想檢查的檔案類型
                fsw.IncludeSubdirectories = true;//是否也檢查目錄下的檔案
                fsw.Created += new FileSystemEventHandler(fsw_Created);
                fsw.EnableRaisingEvents = true;//啟用元件

                LogChangeDelegate = new LogChange(this.LogChangeMethod);
            }

            public delegate void LogChange(string s);
            public LogChange LogChangeDelegate;

            void fsw_Created(object sender, FileSystemEventArgs e)
            {
                this.listBox1.Invoke(this.LogChangeDelegate, e.FullPath.ToString());
            }
            public void LogChangeMethod(string s)
            {
                this.listBox1.Items.Add(s);
            }

    2009年3月7日 上午 08:16

解答

  • 您好,我將您的程式直接copy出來是可以正常執行的,您是否要提供其它的內容讓大家一起看看呢?

            private void Form1_Load(object sender, EventArgs e)
            {
                FileSystemWatcher fsw = new FileSystemWatcher();
                fsw.Path = @"D:\Data\";//主要檢查路徑
                fsw.Filter = "*.txt";//想檢查的檔案類型
                fsw.IncludeSubdirectories = true;//是否也檢查目錄下的檔案
                fsw.Created += new FileSystemEventHandler(fsw_Created);
                fsw.EnableRaisingEvents = true;//啟用元件

                LogChangeDelegate = new LogChange(this.LogChangeMethod);
            }


            public delegate void LogChange(string s);
            public LogChange LogChangeDelegate;

            void fsw_Created(object sender, FileSystemEventArgs e)
            {
                this.listBox1.Invoke(this.LogChangeDelegate, e.FullPath.ToString());
            }
            public void LogChangeMethod(string s)
            {
                this.listBox1.Items.Add(s);
            }

            private void button1_Click(object sender, EventArgs e)
            {
                string FilePath = listBox1.SelectedItem.ToString();
                try
                {
                    StreamReader sr = new StreamReader(FilePath, Encoding.Unicode, true);        //這行就出錯了。
                }
                catch (ArgumentException ex)
                {
                    MessageBox.Show(ex.Message);        //會顯示「路徑中有不合法的字元」的訊息。
                }
            }

    • 已標示為解答 燦爛流星 2009年3月8日 上午 06:50
    2009年3月7日 上午 10:18

所有回覆

  • 您好,我將您的程式直接copy出來是可以正常執行的,您是否要提供其它的內容讓大家一起看看呢?

            private void Form1_Load(object sender, EventArgs e)
            {
                FileSystemWatcher fsw = new FileSystemWatcher();
                fsw.Path = @"D:\Data\";//主要檢查路徑
                fsw.Filter = "*.txt";//想檢查的檔案類型
                fsw.IncludeSubdirectories = true;//是否也檢查目錄下的檔案
                fsw.Created += new FileSystemEventHandler(fsw_Created);
                fsw.EnableRaisingEvents = true;//啟用元件

                LogChangeDelegate = new LogChange(this.LogChangeMethod);
            }


            public delegate void LogChange(string s);
            public LogChange LogChangeDelegate;

            void fsw_Created(object sender, FileSystemEventArgs e)
            {
                this.listBox1.Invoke(this.LogChangeDelegate, e.FullPath.ToString());
            }
            public void LogChangeMethod(string s)
            {
                this.listBox1.Items.Add(s);
            }

            private void button1_Click(object sender, EventArgs e)
            {
                string FilePath = listBox1.SelectedItem.ToString();
                try
                {
                    StreamReader sr = new StreamReader(FilePath, Encoding.Unicode, true);        //這行就出錯了。
                }
                catch (ArgumentException ex)
                {
                    MessageBox.Show(ex.Message);        //會顯示「路徑中有不合法的字元」的訊息。
                }
            }

    • 已標示為解答 燦爛流星 2009年3月8日 上午 06:50
    2009年3月7日 上午 10:18
  • 抱歉!!
    有一行程式碼貼錯。
    void fsw_Created(object sender, FileSystemEventArgs e)
    {
        this.listBox1.Invoke(this.LogChangeDelegate, e.FullPath.ToString() + "\r\n");
    }
    (原本是增加 textBox1 項目用的,忘了把尾巴去掉…)

    我找到錯誤了。
    謝謝您的回覆,感激不盡!


    亞東二技生
    2009年3月8日 上午 06:49