NSString 唯一文件路径以避免名称冲突
有没有一种简单的方法来获取给定的文件路径并修改它以避免名称冲突?类似于:
[StringUtils stringToAvoidNameCollisionForPath:path];
对于给定类型的路径:/foo/bar/file.png
,将返回/foo/bar/file-1.png
,稍后它将返回递增“-1”,类似于 Safari 对下载文件所做的操作。
更新:
我遵循了 Ash Furrow 的建议,并发布了我的实现作为答案:)
Is there a simple way to take a given file path and modify it in order to avoid name collisions? Something like:
[StringUtils stringToAvoidNameCollisionForPath:path];
that for a given path of type: /foo/bar/file.png
, will return /foo/bar/file-1.png
and later it will increment that "-1" similarly to what Safari does for downloaded files.
UPDATE:
I followed Ash Furrow's suggestion and I posted my implementation as answer :)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我遇到了类似的问题,并提出了一种稍微更广泛的方法,尝试以 iTunes 相同的方式命名文件(当您将其设置为管理您的资料库并且您有多个具有相同名称的曲目等时)
。在循环中,因此可以多次调用该函数并仍然产生有效的输出。解释参数,
fileName
是没有路径或扩展名的文件名(例如“file”),folder
只是路径(例如“/foo/bar” ),fileType
只是扩展名(例如“png”)。这三个可以作为一个字符串传入,然后再分开,但就我而言,将它们分开是有意义的。currentPath(可以为空,但不能为 nil)在重命名文件而不是创建新文件时很有用。例如,如果您尝试将“/foo/bar/file 1.png”重命名为“/foo/bar/file.png”,则应传入“/foo/bar/file 1.png” ” for
currentPath
,如果“/foo/bar/file.png”已经存在,您将返回开始时的路径,而不是看到“/foo/bar/file 1. png”并返回“/foo/bar/file 2.png"I had a similar problem, and came up with a slightly broader approach, that attempts to name files the same way iTunes would (when you have it set to manage your library and you have multiple tracks with the same name, etc.)
It works in a loop, so the function can be called multiple times and still produce valid output. Explaining the arguments,
fileName
is the name of the file with no path or extension (e.g. "file"),folder
is just the path (e.g. "/foo/bar"), andfileType
is just the extension (e.g. "png"). These three could be passed in as one string and be split out after, but in my case it made sense to separate them.currentPath
(which can be empty, but not nil), is useful when you're renaming a file, not creating a new one. For example, if you have "/foo/bar/file 1.png" that you're trying to rename to "/foo/bar/file.png", you would pass in "/foo/bar/file 1.png" forcurrentPath
, and if "/foo/bar/file.png" already exists, you'll get back the path you started with, instead of seeing that "/foo/bar/file 1.png" and returning "/foo/bar/file 2.png"我决定实现我自己的解决方案,并且我想分享我的代码。这不是最理想的实现,但它似乎可以完成工作:
...以下是我使用的测试:
I decided to implement my own solution and I want to share my code. It's not the most desirable implementation, but it seems to do the job:
... and the following are the tests I used: