Я пытаюсь написать функцию, которая получает [String]
, которые являются именами файлов, String
, который является именем каталога файлов, и *f
.Функция добавит к каждому файлу целое число в конце.
Вот что я получил до сих пор:
import StdEnv
import StdFile
import FileManipulation
appendNumInEndOfVmFiles :: [String] String *f -> String
appendNumInEndOfVmFiles [] dirname w = "finished"
appendNumInEndOfVmFiles [x:xs] dirname w
# path = dirname +++ "\\\\" +++ x
# (ok,file,files) = fopen path FAppendText w
# file = fwritei 12 file
# (ok2,_) = fclose file w
= appendNumInEndOfVmFiles xs dirname w
Start w
// 1. Receive name of directory from the user.
# (io,w) = stdio w // open stdio
# io = fwrites "Enter name of directory:\n" io // ask for name
# (name,io) = freadline io // read in name
# name = name % (0, size name - 2) // remove \n from name
# (ok,w) = fclose io w // close stdio
| not ok = abort "Couldn't close stdio" // abort in case of failure
// 2. Get a list of all file names in that directory.
# (dir,w) = getDirectoryContents (RelativePath [PathDown name]) w
# fileList = getNamesOfFilesInDirectory (getEntriesList dir)
= appendNumInEndOfVmFiles (getVmFiles fileList) name w
Предположим, что getVmFiles
определено в моем файле FileManipulation.dcl
ив контексте этой проблемы name
- это "myDir"
, а список файлов - ["hello.vm","Wiki.vm"]
По какой-то причине, даже если я получил сообщение «Готово» на экране, файлы не были изменены.Независимо от того, какое целое число я даю fopen
, даже если его FWriteText
или FWriteData
все еще ничего не делает ... также даже если я использую fwritec
или fwrites
с символами, ничего не произошло.
Что мне здесь не хватает?Большое спасибо!