0

LinuxとWindowsのftpサーバー間でファイルを転送するC#.Netコンソールアプリコードがあります。

コードの動作は、ファイル転送のステータスを表示するためにコンソールを自動的に開くことです。Windowsサーバーとの間でファイルを転送しているときに、ファイル転送が進行中であることを示すインジケーターを表示する必要があります(移動または回転しているように見える記号を使用)。これらの記号は次のとおりです: "|" -> "/"-> "-"-> "\"-> "|"

次のコードを使用して、C#.Netで上記の「インジケーター/シンボル」を表示するのに問題はありませんでした。

ProcessStartInfo PSI = new ProcessStartInfo("CMD.exe", "/C [here is the call to psftp / ftp scripts]"); 

String SymbolChar = "|";
Process proc = Process.Start(PSI); 

        while (true)
        {
            Thread.sleep(20);


            if (proc.HasExited)
            {
                Console.WriteLine("\b-> Done\n");
                break;
            }
            else
            {
                SymbolChar = NextChar(SymbolChar);
                Console.Write("\b{0}", SymbolChar);
            }
        }
        StreamReader srError = proc.StandardError;
        StreamReader srOutput = proc.StandardOutput;

//method used to animate status during process
    private static String NextChar(String sCurrentChar)
    {
        String sTempChar = "";

        if (sCurrentChar.equals("|")) {
            sTempChar = "/";
        }
        else if (sCurrentChar.equals("/")) {
            sTempChar = "-";
        }
        else if (sCurrentChar.equals("-")) {
            sTempChar = "\\";
        }
        else if (sCurrentChar.equals("-")) {
            sTempChar = "\\";
        }
        else if (sCurrentChar.equals("\\")) {
            sTempChar = "|";
        }

        return sTempChar;
    }

私の問題は、次のコードを使用して上記のコードをJavaに変換したときに始まりました。

String sParam = "bash " + [here is the call to psftp / ftp scripts];
String cmd[] = {"/bin/bash","-c",sParam};
Process proc = Runtime.getRuntime().exec(cmd);

上記のコードは完全に機能しています。問題は、「アニメ化された」キャラクターを表示する方法がわからなくなったことです。私は突然これを変換する方法を知りません(そして私はひどく助けが必要です):

Process proc = Process.Start(PSI); 

        while (true)
        {
            Thread.sleep(20);


            if (proc.HasExited)
            {
                Console.WriteLine("\b-> Done\n");
                break;
            }
            else
            {
                SymbolChar = NextChar(SymbolChar);
                Console.Write("\b{0}", SymbolChar);
            }
        }

私が前進できるように、Javaの「if(proc.HasExited)」という行に何を使用できるかについて何か考えがありますか?

長い説明でごめんなさい。私は本当に、本当に助けが必要です。

事前にどうもありがとうございました!

4

1 に答える 1

0

'Process.exitValue()'を使用して、例外をキャッチできます(プロセスがまだ完了していない場合は、例外がスローされます)。値が0の場合、プロセスは正常に終了しました。しかし、これはかなり醜い私見です。

プロセスが終了するのを待つためにJavaで私が知っている唯一の「適切な」方法は、プロセスが「Process.waitFor()」で完了するまで現在のThreadブロックを保持することです。

ただし、現在のスレッドがブロックされ、プロセスが終了するのを待っているため、進行状況のアニメーションを表示するには別のスレッドが必要になります。

于 2012-05-13T09:38:14.583 に答える