1

Firefoxでのテキストの表示に関して非常に簡単な質問があります。私のアプリケーションは、Firefoxで表示する必要のあるテキストを生成しています。.txtファイルを保存してFirefoxで開くと、ブラウザのプラグインの1つがテキストを利用して、必要な処理を実行できます。

私はこれを、一時ファイルを作成し、それにテキストを書き込んでから、Firefoxでファイルを開くことによって達成してきました。問題は、Firefoxにフィードされたらそのファイルを削除する必要があるため、これらのファイルが何百も存在しないようにすることです。ブラウザの引数にストレートテキストだけを渡すことができるという情報が見つからなかったため、一時ファイルメソッドを使用しています。

とにかく、これは私が今持っているものであり、File.DeleteFirefoxがファイルに到達する前に実際にファイルを削除していることがわかります。コードをゆっくりと進めれば問題ありません。

何か案は?

try
{
   string fileName = Path.GetTempFileName();
   FileInfo fileInfo = new FileInfo(fileName);
   fileInfo.Attributes = FileAttributes.Temporary;

   string writetext = "text I need in a Firefox page";
   File.WriteAllText(fileName, writetext);

   ProcessStartInfo startInfo = new ProcessStartInfo();
   startInfo.FileName = "firefox.EXE";
   startInfo.Arguments = fileName;
   Process.Start(startInfo);

   if (File.Exists(fileName))
     {
         File.Delete(fileName);
     }

   }
   catch (SystemException ex)
   {
     MessageBox.Show("An error occured: " + ex.Message);
   }
4

3 に答える 3

4

または、代わりにデータURIを使用できます。firefox.exe "data:text/plain,Lorem ipsum dolor sit amet"

于 2012-06-13T00:56:07.253 に答える
0

ユーザーTEMPフォルダーにアプリ固有のサブフォルダーを作成し、そこにファイルを保存します。

そうすることで、私以外の誰もそのフォルダに書き込みをしないと思います。

コードを実行するたびProcess.Startに、「ファイルは30分以上前に作成されました」というフィルターを使用して、すべてのファイルをそのフォルダーから削除する必要があります(値は異なる場合があります)。

最悪のシナリオでは、そのフォルダーにいくつかのファイルがありますが、ファイルの量は増えません。

于 2012-06-13T00:57:37.253 に答える
0

ここで取ることができるいくつかのアプローチがあります。最も危険なアプローチは、単に電話Thread.Sleep( 5000 )をかけて、Firefoxがファイルを読み取って削除する前に十分な時間であることを期待することです。ただし、非常に遅いシステムでは、それだけでは不十分な場合があります。

より良いアプローチは、ファイルを削除する前にプロセスが終了するまで待つことです。

var p = Process.Start( startInfo );
p.WaitForExit();
if( File.Exists( fileName ) ) {
    File.Delete( fileName );
}

もちろん、これはFirefoxが終了するまで呼び出し側プログラムをブロックします。Exitedまだ別のオプションがあり、それはイベントを待つことです:

var p = Process.Start( startInfo );
p.Exited += FirefoxExited;

// ...

void FirefoxExited( object sender, EventArgs e ) {
    if( File.Exists( fileName ) )
        File.Delete( fileName );
}
于 2012-06-13T01:02:09.927 に答える