0

显然这应该是可能的。例如,使用 NOTEPAD 或 HxD 打开和操作文件。但是它们不都是文本文件吗...如何指定使用哪个文本编辑器打开文件并使用 WINDOWS API 对文件进行操作。它肯定不在“CreateFile”中。

4

3 回答 3

0

希望我理解你的问题......最简单的方法是启动所需的编辑器并将文件名作为参数传递,而不是“调用”文件(这将启动与文件类型关联的默认程序) .

例如,notepad.exe mytextfile.txtgvim.exe mytextfile.txt

如果编辑器不在您的. 上,则%PATH%需要使用完整路径文件名。

于 2011-04-14T05:03:45.570 回答
0

你到底想做什么?你可以:

  1. 维护您希望安装的编辑器列表,并在系统的 PATH 中有条目(坏主意)
  2. 有一个您想要使用的编辑器,查询 Windows 注册表以找到编辑器的安装路径(使用RegGetValue),然后使用 ) 启动编辑器CreateProcess(更好的主意)
  3. 查询注册表以获取给定文件类型的默认编辑器,然后使用CreateProcess. (最好的主意)

但这一切都取决于你的真正目标是什么。

根据需求编辑

所以,就这样我们在同一个页面上,从 C++ 开始,你想要:

  1. 将命令行参数带到您的 C++ 应用程序(文件名)
  2. 在任意编辑器中打开该文件
  3. 检测用户何时对该文件进行了更改
  4. 对文件内容进行操作

那是对的吗?

如果是这样,您可以:

  1. 利用Boost 库计算文件中当前数据的 CRC
  2. 使用我最初描述的方法之一启动编辑器
  3. 坚持一个紧密的循环,sleep因此当最初计算的 CRC 与循环的每次迭代计算的 CRC 匹配时,您不会占用资源

当然,您必须处理各种问题(这只是描述我可能使用的算法的一种超级简单的方式),例如:

  1. 如果用户不更改文件会发生什么?
  2. 如果找不到文件会怎样?

我确信有许多不同的方法可以做到这一点,但这是我目前能想到的最简单的方法(同时仍然能够相当确定这些变化)。

免责声明:我还没有实现这样的东西,所以我可能完全不在基地;)

于 2011-04-14T05:03:48.693 回答
0

您是否正在寻找Windows 上的ShellExecute()或API?ShellExecuteEx()他们将启动为文件注册的任何程序(通常基于文件名扩展名)。

于 2011-04-14T05:44:52.870 回答