将纯文本发送到Firefox

时间:2012-06-13 00:44:18

标签: c# firefox temporary-files

我有一个关于在Firefox中查看文本的非常直接的问题。我的应用程序正在生成一些我需要在Firefox中查看的文本。如果我保存.txt文件并在Firefox中打开它,浏览器的其中一个插件就可以使用该文本并执行它需要做的事情。

我通过创建临时文件,将文本写入文件,然后在Firefox中打开文件来实现这一目标。问题是,我需要删除该文件一旦它被提供给Firefox,所以我没有数百个这些文件。我正在使用临时文件方法,因为我无法找到有关能够在浏览器参数中传递一些直接文本的信息。

无论如何,这就是我现在所拥有的,你可以看到我的File.Delete实际上删除了该文件,然后才能进入Firefox。如果我更慢地逐步执行代码,那很好。

有什么想法吗?

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);
   }

3 个答案:

答案 0 :(得分:4)

或者您可以改用data URI,例如firefox.exe "data:text/plain,Lorem ipsum dolor sit amet"

答案 1 :(得分:0)

我会在用户TEMP文件夹中创建特定于app的子文件夹并在那里存储文件。

这样做我会假设除了我之外没有其他人会写到该文件夹​​。

每次运行Process.Start代码时,都需要使用过滤器“文件创建时间超过30分钟”从该文件夹中删除所有文件(值可能不同)。

在最糟糕的情况下,该文件夹中会有一些文件,但文件数量不会增加。

答案 2 :(得分: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 );
}