- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这与此 SO 帖子中解决的问题相同:How to rename files in documents directory但这对我一点帮助都没有。这是我遇到的唯一一篇似乎与我的问题相关的帖子。
我有一个 Collection View ,其中图像是通过 didFinishPickingMediaWithInfo 中的 imagePickerController 添加的。它循环遍历文档目录,并根据下一个可用的索引号为所选图像命名。因此图像被命名为 image1.jpg、image2.jpg 等。当图像加载到 collectionView 中时,我再次循环并按索引顺序显示图像。当需要删除图像时,我可以在文档目录中找到它并将其删除,但索引顺序会被中断,我无法再加载图像。因此,如果我删除 image3.png,文档目录将包含 image1.jpg、image2.jpg、image4.jpg、image5.jpg 等。
我当前尝试重命名或移动目录中图像的代码仍在索引号上循环,并且当涉及到空索引(image3.jpg)时自然停止。如何使 image4.jpg 移动到 image3.jpg 原来所在的位置(并移动删除图像的索引后面的所有其他图像)?
我无法完全理解重命名文件所需的逻辑。如果您需要更多代码,请告诉我。感谢所有建议。这是我目前拥有的:
@objc func tapToDelete(recognizer: UITapGestureRecognizer)
{
let pointInCollectionView = recognizer.location(in: collectionView)
let indexPath = collectionView.indexPathForItem(at: pointInCollectionView)
countIndex = (indexPath?.row)! + 1
let filepath = getFolderAndFilePath() //this gets the folder and filepath of each image
let alert = UIAlertController(title: "Delete This Image?", message: "Are you sure? This cannot be undone.", preferredStyle: .alert)
alert.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler: nil))
alert.addAction(UIAlertAction(title: "Delete", style: .destructive, handler: { (action) in
do
{
try self.fileManager.removeItem(at: filepath as URL)
self.imageArray.remove(at: self.countIndex)
self.folderPath = self.getFolderPath()
if self.folderPath != nil
{
var j = 0
var z = 0
var finalArray = [String]()
do
{
let directoryContent = try FileManager.default.contentsOfDirectory(at: self.folderPath! as URL, includingPropertiesForKeys: nil, options: [])
for _ in directoryContent
{
z += 1
let fileString = String(format: "image%d.jpg", z)
let oldPath = self.folderPath?.appendingPathComponent(fileString)
print("filename oldPath 😣: \(String(describing: oldPath))")
if self.fileManager.fileExists(atPath: (oldPath?.path)!)
{
j += 1
let newFileName = String(format: "image%d.jpg", j)
finalArray.append(newFileName)
let newPath = oldPath?.deletingLastPathComponent().appendingPathComponent(newFileName)
print("new filename: \(String(describing: newFileName))")
_ = try? self.fileManager.moveItem(atPath: (oldPath?.path)!, toPath: (newPath?.path)!)
}
else
{
print("no file here")
//this is called when we get to the image removed(image3.jpg)
}
self.collectionView.reloadData() //this reloads the collectionview and updates the count but still shows image3 instead of image4 even though image3 has been removed from the directory
}
}
catch
{
print("Could not search for urls of files in documents directory: \(error)")
}
}
}
catch
{
print(error)
}
}))
self.present(alert, animated: true)
}
最佳答案
这可能需要一些调整,但是删除文件后以下方法(伪代码)怎么样?
let directoryContent = try FileManager.default.contentsOfDirectory(at: self.folderPath! as URL, includingPropertiesForKeys: nil, options: [])
var index = 1
var newImageArray:[URL] = []
for fileURL in directoryContent
{
let newFileName = String(format: "image%d.jpg", index)
let newFilePathURL = makePathAsYouWere()
_ = try? self.fileManager.moveItem(atPath: fileURL, toPath: newFilePathURL)
index += 1
newImageArray.append(newFilePathURL)
}
self.imageArray = newImageArray
collectionView.reload()
本质上,一旦删除文件,您将拥有一组可以迭代的文件。该列表可能需要排序才能使它们按正确的顺序排列,但一旦它们排序(文件 1、文件 2、文件 4、文件 5)。您应该能够按顺序重命名每个文件,以使它们按数字顺序恢复,没有间隙,因为上面的方法不关心旧文件的索引。
对于图像数组,您应该能够使用您正在创建的新文件路径创建一个新数组,替换旧数组,然后触发重新加载。这样,您也不必从图像数组中删除删除项,它会在您重建内容时删除。
请告诉我这是否足以让您开始,否则,我可以尝试整理一个完整的示例。
关于swift - 文档目录 : delete file and rename remaining files in Swift 4. 2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54151399/
我已经阅读了几个小时的 rsync 文档,但我无法弄清楚如何向 rsync 传达如何仅重命名(而不是重新上传文件夹及其内容)目标文件夹,当它们在资源。 我正在使用 SSH 连接到目的地,本地文件夹是源
我正在使用 MySQL。这是一个例子,我想将表 A 重命名为 B,那么以下语句之间有什么区别: alter table A rename to B; 还有这个: rename table A to B
当我在解决方案资源管理器中选择文件或目录并按下 F2 键时,我试图让 Visual Studio 重命名文件。但是,我还希望 Visual Studio 在我按 F2 时进行重构重命名,并且我在编辑器
我无法让 objcopy --rename-sym 工作。 在一个新的 Android 项目中,我创建了目录 jni 和文件 stub.c: #include #include "dlog.h" j
MKPinAnnotationView 在 iOS 15 中重命名为 MKMarkerAnnotationView。 在 iOS 14 之前,我将 MKPinAnnotationView 子类化为 c
如果您调用 os.rename提供不存在的文件或目录,OSError通过将其设置为 None 来忽略文件名.这是 2.6 中的错误,已在某些更高版本中修复? 您只需执行以下操作即可重现该问题: pyt
假设我的前面板有 100 个按钮,名称为“按钮 1”...“按钮 100”。如何快速将它们全部重命名为“Push Button 1”...“Push Button 100”? 最佳答案 与 Dave_
考虑下面这个愚蠢的例子 theory meta_all imports Main begin lemma strict_subset: "⟦ A ⊂ B ⟧ ⟹ ∃a ∈ B. a ∉ A" appl
我正在尝试使用以下代码重命名节点,我需要将节点的 ID 和新名称传递给 server.aspx 如何获取节点的新名称 如何将这两个值传递到 server.aspx 页面 谢谢 .bind("re
我需要一个脚本,允许我将文件名剥离到文件夹中的文件,并将文件夹名称应用于文件,并在每个文件名的末尾添加一个递增的数字。 因此文件名在其原始状态下看起来像这样: gdgeregdja34gtj.jpg
以前,在突出显示 Java 文件中的变量名称后使用 ALT+COMMAND+R 组合键将进入重命名重构模式。现在,组合键将突出显示的文本替换为注册商标符号。 如何让组合键进入重命名重构模式而不是插入符
我有一个 Linux Qt 应用程序,它创建了一些 QThreads . 我知道当你创建一个线程时,它会继承父名,当我使用 htop 时我可以看到它。或 ps ax -L . 是否可以通过像 ps a
在处理器中,为什么我们不能简单地增加寄存器的数量,而不是拥有一个巨大的重新排序缓冲区并映射寄存器以解决名称依赖关系? 最佳答案 原因很多。 首先,我们经常设计微架构来执行现有架构的程序。添加寄存器会改
rename如果 newname 指向不同的驱动器,实际上会复制文件(至少在 Windows 10 平台上)。 有没有办法避免这种情况?我希望它在这种情况下失败。 假设我要移动 100 GB 的文件。
从业务角度来看,问题就出在这里 我们有许多人们使用的共享文件夹,我们称之为//shared/the/drive。但是,我们的服务器可能知道这个共享驱动器是其他名称,可能是 //ir83pn3br8mw
我从 XML 文件中读出它们的类别,然后重命名并保存它们的年份。因此,文件“XYZ.xml”现在是“News_2014.xml”。 问题是,从 2014 年开始,有多个 XML 文件的类别为“新闻”。
假设您有一个名为 foo 的文件包含一些确定的字节序列 X ,并且您想自动将其替换为名为 bar 的文件包含一个字节序列 Y .这通常使用 rename() 完成系统调用---在这种情况下,通过调用r
我正在尝试重命名用户指定目录中的一堆文件,但它似乎只在用户指定程序运行的目录时才有效。例如,从命令行运行时: ./a.out 。 “NewName.txt” 将起作用,而 ./a.out .. "Ne
这个问题可能看起来有点奇怪,但我会尝试对用例进行一些争论。 假设您有一个二维(笛卡尔)场的通用实现,其维度为 dim1 和 dim2,坐标为 c1 和 c2。 struct Field2D { s
我正在使用一个 php 应用程序,其中有一行用于移动文件。我将该方法包含在一个 try...catch block 中,因此,如果抛出错误,可以管理回滚系统。但是从未捕获到异常,那么重命名会引发任何类
我是一名优秀的程序员,十分优秀!