-9

私は 1 台の PC でプログラムを作成し、非常に注意深くテストしましたが、すべて正常に動作しました。しかし、別のコンピューターに .exe を持って行っても、そうではありません。

このプログラムが行うことは、Process.start(); を使用して Java プログラムを実行する cmd を起動することです。

これは結果です:

javac: 無効なフラグ: C:\Users\Lan 使用法: javac 使用可能なオプションのリストについては -help を使用してください

C:\Users\Lan Nguyen\Desktop\TestGrader\f1>

\TestGrader\f1; が表示されている場合。これは正しいフォルダです。移動したい場所です。したがって、コードは正常に動作します

しかし、 javac: invalid flag: C:\Users\Lan; を見ると、これは、私のコードが最初に作成された別のコンピューターです。

なぜこれが当てはまるのかわかりません。誰かがそれを修正するのを手伝ってくれませんか。ありがとうございました。ところで、これは Java とは関係ありません。後で Java を実行する cmd を実行するために c# を使用したいだけです。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Diagnostics;
using System.Threading;

namespace Gui
{
    public partial class GradingProgram : Form
    {
        private String[] studentName;
        private int index = 0;
        String projectName, cmd, compileJava, runJava, path, unzip;

        public GradingProgram()
        {
            studentName = new String[50];
            InitializeComponent();
            cmd = "cmd";
            unzip = "/K rar x ";
            compileJava = "/K javac ";
            button3.Enabled = false;
            this.AutoSize = true;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            FolderBrowserDialog folderChooser = new FolderBrowserDialog();
            folderChooser.ShowDialog();
            path = folderChooser.SelectedPath;            
        }

        private void updateLabels()
        {
            textBox2.Clear();
            for (int i = 0; i < index; i++)
            {
                textBox2.AppendText(studentName[i]);
                textBox2.AppendText(Environment.NewLine);
            } 
        }

        private void button2_Click(object sender, EventArgs e)
        {
            String currentDirectory;

            for (int i = 0; i < index; i++)
            {
                currentDirectory = @path + "\\" + studentName[i];
                Directory.SetCurrentDirectory(currentDirectory);
                foreach (String files in Directory.GetFiles(currentDirectory))
                {
                    if (Path.GetExtension(files) == ".java")
                    {
                        Process.Start(cmd, compileJava + files).WaitForExit();
                    }
                }
            }
        }

        private void button3_Click(object sender, EventArgs e)
        {
            projectName = textBox1.Text;
            runJava = "/K java " + projectName;
            String currentDirectory;
            for (int i = 0; i < index; i++)
            {
                currentDirectory = @path + "\\" + studentName[i];
                Directory.SetCurrentDirectory(currentDirectory);
                textBox3.ScrollBars = ScrollBars.Vertical;
                foreach (String files in Directory.GetFiles(currentDirectory))
                {
                    if (Path.GetExtension(files) == ".java")
                    textBox3.Text += File.ReadAllText(files);
                    textBox3.AppendText("------------------------------------------------------------");
                }
                Process.Start(cmd, runJava).WaitForExit();
                try
                {
                    textBox4.Text = File.ReadAllText(Directory.GetCurrentDirectory() + "\\" + "output.txt");
                }
                catch (Exception )
                {
                    textBox4.Text = "no output";
                }
            }
        }

        private void button4_Click(object sender, EventArgs e)
        {
            Directory.SetCurrentDirectory(@path);
            foreach (String files in Directory.GetFiles(path))
            {
                if (Path.GetExtension(files) == ".rar")
                {
                    Process.Start(cmd, unzip + files).WaitForExit();
                }
            }

            foreach (String folder in Directory.GetDirectories(path))
            {
                studentName[index] = new DirectoryInfo(folder).Name;
                index++;
            }
            button4.Enabled = false;
        }

        private void button5_Click(object sender, EventArgs e)
        {
            updateLabels();
        }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {
            if (this.Text != "")
            {
                button3.Enabled = true;
            }
        }

    }
}
4

1 に答える 1

1

次のようなものを使用してはいけません:

runJava = String.Format(@"/K java ""{0}""", projectName);

ユーザー名にスペースがあると失敗するようです。両方のコンピューターに同じ名前のアカウントがある場合、2 つの C:\Users\... ディレクトリも作成されます。

于 2012-09-28T14:03:19.387 に答える