簡體   English   中英

C#空路徑名不合法 - Winform

[英]C# Empty path name is not legal - Winform

此代碼下方是我的 Windows 窗體上的添加按鈕。 當我嘗試在不添加任何圖像且沒有路徑的情況下單擊它時,會出現我在這些代碼下面提到的錯誤。 我想修復這個異常,即使用戶沒有添加圖像或文件路徑,它也不會出現異常。 我知道它被問過很多次,但他們的代碼中的例外是不同的,所以我在那里有點困惑。 謝謝

private void btn_add_Click(object sender, EventArgs e)
    {
        byte[] image = null;
        var stream = new FileStream(this.txt_path.Text, FileMode.Open, FileAccess.Read);
        var read = new BinaryReader(stream);
        image = read.ReadBytes((int)stream.Length);


        using (var con = SQLConnection.GetConnection())
        {


            if (string.IsNullOrEmpty(cbox_supplier.Text) || string.IsNullOrEmpty(txt_code.Text) || string.IsNullOrEmpty(txt_item.Text) || string.IsNullOrEmpty(txt_quantity.Text) || string.IsNullOrEmpty(txt_cost.Text) || string.IsNullOrEmpty(txt_path.Text))
            {
                MetroMessageBox.Show(this, "Please input the Required Fields", "System Message:", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
            else
            {

                var selectCommand = new SqlCommand("Insert into employee_product (Image, Supplier, Codeitem, Itemdescription, Date, Quantity, Unitcost) Values (@Image, @Supplier, @Codeitem, @Itemdescription, @Date, @Quantity, @Unitcost)",con);
                selectCommand.Parameters.AddWithValue("@Image", image);
                selectCommand.Parameters.AddWithValue("@Supplier", cbox_supplier.Text);
                selectCommand.Parameters.AddWithValue("@Codeitem", txt_code.Text.Trim());
                selectCommand.Parameters.AddWithValue("@Itemdescription", txt_item.Text.Trim());
                selectCommand.Parameters.AddWithValue("@Date", txt_date.Text.Trim());
                selectCommand.Parameters.AddWithValue("@Quantity", txt_quantity.Text.Trim());
                selectCommand.Parameters.AddWithValue("@Unitcost", txt_cost.Text.Trim());
                selectCommand.ExecuteNonQuery();
                MessageBox.Show("Added successfully", "SIMS", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);
                txt_path.Clear();
                pictureBox1.Image = null;
                txt_code.Clear();
                txt_item.Clear();
                txt_quantity.Clear();
                txt_cost.Clear();
                _view.AddingProduct();

            }

        }
    }
   private void btn_upload_Click(object sender, EventArgs e)
    {
        OpenFileDialog opnfd = new OpenFileDialog();
        opnfd.Filter = "Image Files (*.jpg;*.jpeg;.*.gif;*.png;)|*.jpg;*.jpeg;.*.png;*.gif";
        opnfd.Title = "Select Item";

        if (opnfd.ShowDialog() == DialogResult.OK)
        {
            var path = opnfd.FileName.ToString();
            txt_path.Text = path;
            pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
            pictureBox1.Image = Image.FromFile(opnfd.FileName);

        }
    }

// 這是發生系統參數異常的地方

        byte[] image = null;
 -----> var stream = new FileStream(this.txt_path.Text, FileMode.Open, FileAccess.Read);
        var read = new BinaryReader(stream);
        image = read.ReadBytes((int)stream.Length);

您可以預先檢查文件是否存在:

if (File.Exists(txt_path.Text))
{
    var stream = new FileStream(this.txt_path.Text, FileMode.Open, FileAccess.Read);
    var read = new BinaryReader(stream);
    image = read.ReadBytes((int)stream.Length);
    // The rest of your code
}

或在發生錯誤時捕獲錯誤:

try
{
    var stream = new FileStream(this.txt_path.Text, FileMode.Open, FileAccess.Read);
    var read = new BinaryReader(stream);
    image = read.ReadBytes((int)stream.Length);
    // The rest of your code
}
catch
{
    // Creating filestream object failed.
}

當您詢問將 FileStream 包裝在using語句中時:

當您打開一個FileStream您需要明確地關閉它並確保您已經處理它以刪除打開的文件句柄 - 以便其他應用程序可以訪問該文件。 您可以通過調用 Close 和 Dispose 來執行此操作,也可以將對象包裝在 using 語句中,該語句將自動為您調用 close 和 dispose。

using (var stream = new FileStream(this.txt_path.Text, FileMode.Open, FileAccess.Read))
{
    using (var read = new BinaryReader(stream))
    {
        image = read.ReadByres((int)stream.Length);
    } // BinaryReader is Closed and Disposed here
} // FileStream is Closed and Disposed here

FileStreamBinaryReader對象( streamread )僅存在於using語句右大括號}所在的位置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM