2016-04-06 5 views
0

Мне нужно прочитать содержимое всех файлов в папке по одному и переместить файл в другую папку после его чтения. У меня есть жесткий диск для чтения одного файла. copy-lob из файла "E: \ New \ a.txt" в c-edistring.Как читать все файлы из каталога и перемещать файлы в другой каталог в процессе работы openge 4gl?

Скажем, есть три файла: a.txt, b.txt, c.txt.

После чтения a.txt файл следует перенести в другую папку E: \ Old. а затем b и c.

ответ

3

INPUT FROM OS-DIR Statement позволяет вам получить список всех файлов в папке.

DEFINE VARIABLE cFileShort AS CHARACTER NO-UNDO . 
DEFINE VARIABLE cFileLong AS CHARACTER NO-UNDO. 
DEFINE VARIABLE cType  AS CHARACTER NO-UNDO. 

INPUT FROM OS-DIR ("e:\New") . 

REPEAT: 
    IMPORT cFileShort cFileLong cType . 

    /* File or Directory ? */ 
    IF cType MATCHES "*F*" THEN 
     MESSAGE "ShortFileName" cFileShort SKIP 
       "LongFileName" cFileLong . 

END.  

Для перемещения файлов вам не нужно использовать COPY-LOB, который копирует содержимое файла в память.

OS-COPY VALUE (cFileLong) VALUE (SUBSTITUTE ("e:\Old\&1", cFileShort) . 
IF OS-ERROR = 0 THEN 
    OS-DELETE VALUE (cFileLong) . 

В пределах цикла выше будет выполнен переход, не читая полные файлы в памяти.

Когда вы можете рассчитывать на .NET (Windows, OpenEdge 10.2B и выше), вы также можете использовать классы .NET для операций с файлами, аналогичные https://msdn.microsoft.com/en-us/library/cc148994(v=vs.100).aspx

+0

Эта часть метания ошибки OS-COPY VALUE (cFileLong) VALUE (ЗАМЕНИТЬ ("е: \ Старый \ & 1", cFileShort) IF OS-ERROR = 0 THEN . OS-DELETE VALUE (cFileLong). – mac100

+0

Какая ошибка вызывается? –

+0

Похоже, у меня не было закрывающей скобки. –