如何在文件名中编码文件路径? (无碰撞,跨平台)

发布于 2024-10-14 16:09:27 字数 381 浏览 2 评论 0原文

如何对文件名中的文件路径进行编码,以便文件名有效且不存在冲突?换句话说:

  • 生成的文件名不包含特殊字符,例如“\”、“:”或“/”。
  • 两个不同的文件路径永远不会编码为相同的文件名。

示例:文件路径“C:\Program Files\My Program”->文件名“NGQqKY4pBaP7lPKQPD6Y...”

此示例仅用于说明;可能有更好(更简单)的方法来做到这一点。

问题背景:这种文件路径编码用于Java中的简单单实例检查:如果程序的两个实例位于不同的目录中,则可以同时运行,但如果它们位于完全相同的目录中则不能同时运行。 我知道还有其他方法可以确保单实例属性,但我发现在我的特定情况下,文件路径编码在成本效益比方面是最好的。

How can I encode a filepath in filename so the filename is valid and there are no collisions? In other words:

  • The resulting filename does not contain special characters such as '\', ':' or '/'.
  • Two different filepaths are never encoded into the same filename.

Example: filepath "C:\Program Files\My Program" -> filename "NGQqKY4pBaP7lPKQPD6Y..."

This example is only for illustration; there may be better (and simpler) ways to do this.

Problem background: This filepath encoding is used for a simple single-instance-check in Java: Two instances of the program can be run simultaneously if they are located in different directories, but not when they are located in the exact same directory.
I know there are other ways to ensure the single-instance property, but I find the filepath encoding to be the best in terms of cost-benefit-ratio in my particular situation.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

夏末 2024-10-21 16:09:27

使用路径的字符串并仅对特殊字符进行编码,例如:

% -> %%
\ -> %)
/ -> %(
: -> %;

不再有特殊字符,但仍然有用且可读。但是,由于您只是想确保唯一性,更好的(但不是可逆的解决方案)可能是:

: -> ;
\ -> %
/ -> %
% -> %

我不相信您的文件系统中会有 some%file 和 some/file ,所以这可能对您来说足够好。

Use the String of the path and encode just the specials, like:

% -> %%
\ -> %)
/ -> %(
: -> %;

No more special chars, but still useful and readable. However, since you just want to ensure uniqueness, a better (but not invertable solution) may be:

: -> ;
\ -> %
/ -> %
% -> %

I don't believe there will be a some%file and some/file in your filesystem, so this might work good enought for you.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文