0

なんらかの理由で、これをインストールしたユーザーがボタンをクリックしても何も起こりません。また、試してキャッチすると、ファイルが既に存在すると表示されますが、存在しません。サブフォルダーにはありますが、ファイルにはありません。なにが問題ですか?これが私のコードです:

            string pathUser4 = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile);
            string pathDownload4 = (pathUser4 + @"\Downloads\");
            string sourceFile = pathDownload4 + listBox1.Text;

            string pathdoc5 = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
            string pathDownload5 = (pathdoc5 + @"\iracing\setups\");
            string destinationFile = pathDownload5 + comboBox1.Text;

            File.Move(sourceFile, destinationFile);
        }
        catch { }
            if (comboBox1.Text == "Select File Destination")
            {
                MessageBox.Show("Please Select A Destination Folder", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
4

4 に答える 4

0

File.Moveの以前の問題がどこにあるのかを理解するのに役立ちます

Debug.Assert(!File.Exists(destinationFile),String.Format("ファイルは既に存在します:{0}",destinationFile))

デバッグできない場合は、同等の目的で MessageBox を表示できます

于 2012-05-22T21:14:15.350 に答える
0

まず、同じディレクトリ内のファイルとディレクトリの名前を完全に同じにすることはできません。Windows では、ディレクトリとファイルの名前は別個の属性ではありません。あなたのコメントがそのヒントになりました。したがって、.NET から取得した例外は正確です。

この問題は try-catch ブロックとは関係ありません。あなたはそれを非難しているようです。エラーを知ることは常に良い考えです。

コーディング方法の 1 つは、昔ながらの方法である File.Move の前にファイル/ディレクトリの存在をチェックすることです:)

于 2012-05-22T21:12:17.443 に答える
0

あなたの最初の問題は、ファイルを移動しようとした後に、comboBox1.Text の適切な値をチェックすることだと思います。

次に、MichelZ が提案したように Path オブジェクトを使用します。その方が簡単で、問題が発生することはありません。

変更後のコードは次のようになります。

        // TODO: check for listBox1.Text to be blank or non-file

        if (comboBox1.Text == "Select File Destination")
        {
            MessageBox.Show("Please Select A Destination Folder", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }

        string sourceFile = Path.Combine(Environment.SpecialFolder.UserProfile, "Downloads", listBox1.Text;
        string destinationFile = Path.Combine(Environment.SpecialFolder.MyDocuments, "iracing", "setups", comboBox1.Text;
        File.Move(sourceFile, destinationFile);
    }
    catch { }
于 2012-05-22T21:01:23.113 に答える
0

変数の内容を(デバッグを介して)検証していますか、それとも組み合わせが期待どおりに機能していると想定していますか?sourceFiledestinationFile

listBox1また、この実装がもたらすインジェクションのリスクを十分に認識しており、とのcomboBox1値を慎重に検証していることを教えてください。

于 2012-05-22T21:04:05.027 に答える