1

你好这是我的第一个haskell代码

import Data.List
import Data.Function

import System.IO
import System.Directory
import System.FilePath.Windows

import Control.Monad
import Text.Printf

main = do

    all <- getDirectoryContents "."
    cd  <- takeBaseName `fmap` getCurrentDirectory
    let sorted    = zip[1..] . sort . filter ((isPrefixOf `on` reverse) ".jpg") $ all

    forM_ sorted $ \(i,x) -> do

        let z = if odd i then 1 else 2
        let q = ceiling (fromIntegral i / 2.0 )

        printf "  %s --> %s.%d.%d.jpg\n" x cd (q::Int) (z::Int)
        renameFile x (printf "%s.%d.%d.jpg" cd (q::Int) (z::Int))

但它的效果真的很糟糕

D:\Contrib\rnm\bin>rnm.exe
  bin.1.1 - копия (10).jpg --> bin.1.1.jpg
  bin.1.1 - копия (11).jpg --> bin.1.2.jpg
  bin.1.1 - копия (12).jpg --> bin.2.1.jpg
  bin.1.1 - копия (13).jpg --> bin.2.2.jpg
  bin.1.1 - копия (14).jpg --> bin.3.1.jpg
  bin.1.1 - копия (15).jpg --> bin.3.2.jpg
  bin.1.1 - копия (16).jpg --> bin.4.1.jpg
  bin.1.1 - копия (17).jpg --> bin.4.2.jpg
  bin.1.1 - копия (18).jpg --> bin.5.1.jpg
  bin.1.1 - копия (19).jpg --> bin.5.2.jpg
  bin.1.1 - копия (2).jpg --> bin.6.1.jpg
  bin.1.1 - копия (3).jpg --> bin.6.2.jpg
  bin.1.1 - копия (4).jpg --> bin.7.1.jpg
  bin.1.1 - копия (5).jpg --> bin.7.2.jpg
  bin.1.1 - копия (6).jpg --> bin.8.1.jpg
  bin.1.1 - копия (7).jpg --> bin.8.2.jpg
  bin.1.1 - копия (8).jpg --> bin.9.1.jpg
  bin.1.1 - копия (9).jpg --> bin.9.2.jpg
  bin.1.1 - копия.jpg --> bin.10.1.jpg
  bin.1.1.jpg --> bin.10.2.jpg

D:\Contrib\rnm\bin>rnm.exe
  bin.1.2.jpg --> bin.1.1.jpg
  bin.10.1.jpg --> bin.1.2.jpg
  bin.10.2.jpg --> bin.2.1.jpg
  bin.2.1.jpg --> bin.2.2.jpg
  bin.2.2.jpg --> bin.3.1.jpg
  bin.3.1.jpg --> bin.3.2.jpg
  bin.3.2.jpg --> bin.4.1.jpg
  bin.4.1.jpg --> bin.4.2.jpg
  bin.4.2.jpg --> bin.5.1.jpg
  bin.5.1.jpg --> bin.5.2.jpg
  bin.5.2.jpg --> bin.6.1.jpg
  bin.6.1.jpg --> bin.6.2.jpg
  bin.6.2.jpg --> bin.7.1.jpg
  bin.7.1.jpg --> bin.7.2.jpg
  bin.7.2.jpg --> bin.8.1.jpg
  bin.8.1.jpg --> bin.8.2.jpg
  bin.8.2.jpg --> bin.9.1.jpg
  bin.9.1.jpg --> bin.9.2.jpg
  bin.9.2.jpg --> bin.10.1.jpg

D:\Contrib\rnm\bin>rnm.exe
  bin.1.1.jpg --> bin.1.1.jpg
  bin.1.2.jpg --> bin.1.2.jpg
  bin.10.1.jpg --> bin.2.1.jpg

此代码如何删除我的照片?我该如何修复它?谢谢...

4

1 回答 1

6

此代码如何删除我的照片?

文档renameFile说:

renameFile old new将现有文件系统对象的名称从old更改为new。如果new对象已经存在,它会被old对象原子地替换。

所以在第二步,当你重命名时bin.10.2.jpg --> bin.2.1.jpg,旧bin.2.1.jpg文件会丢失。当你以后有的时候bin.2.1.jpg --> bin.2.2.jpg,你正在重命名以前的文件bin.10.2.jpg并丢失旧的文件bin.2.2.jpg。等等。

我该如何修复它?

使用不能与现有文件或临时文件夹冲突的临时名称。

于 2013-04-01T11:54:10.753 回答