Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.12.26;
Скачать: CL | DM;

Вниз

Работа с файлами   Найти похожие ветки 

 
Overclocker ©   (2010-10-04 14:07) [0]

Задача такая: существуют различные файлы (в основном *.doc) в каком либо каталоге, имена файлов - дата (обозваны датами когда были созданы), необходимо скопировать или переместить файлы в папки(созданные по датам, т.е. соответствующий файл в соответствующую папку, соответветственной датой). Пути от куда и куда желательно указывать самомоу.. помогите хотябы начать или исходники если есть, примеры, сайты где это есть, нужно очень сильно!!!


 
MBo ©   (2010-10-04 14:10) [1]

>помогите хотябы начать
начни с функций FindFirst и FindNext


 
Overclocker ©   (2010-10-04 14:27) [2]

да с ней я то разобрался только вот вопрос там путь указывать нада в самом коде а нада хотябы пути указывать в том же Edit-е))


 
{RASkov} ©   (2010-10-04 14:33) [3]

> Пути от куда и куда желательно указывать самомоу

> [2] Overclocker ©   (04.10.10 14:27)
> а нада хотябы пути указывать в том же Edit-е

т.е. два пути в одном Эдите?


 
Overclocker ©   (2010-10-04 14:43) [4]

поис я организовал так:

procedure TForm1.Button1Click(Sender: TObject);
var
 F: TSearchRec;
 Path: string;
 Attr: Integer;
begin
 Path := e1.Text;        // е1  - edit1

 
if ComboBox1.ItemIndex <> 0 then
begin
ComboBox1.ItemIndex:= faReadOnly;
   Attr := ComboBox1.ItemIndex;
      FindFirst(Path, Attr, F);
       end ;

   if ComboBox1.ItemIndex <> 1 then
begin ComboBox1.ItemIndex:= faHidden;
   Attr := ComboBox1.ItemIndex;
      FindFirst(Path, Attr, F);
        end;

 if ComboBox1.ItemIndex <> 2 then
 begin
ComboBox1.ItemIndex:= faSysFile;
   Attr := ComboBox1.ItemIndex;
      FindFirst(Path, Attr, F);end;

 if ComboBox1.ItemIndex <> 3 then
 begin
ComboBox1.ItemIndex:= faArchive ;     Attr := ComboBox1.ItemIndex;
      FindFirst(Path, Attr, F);end;

 if ComboBox1.ItemIndex <> 4 then  begin
ComboBox1.ItemIndex:= faDirectory;       Attr := ComboBox1.ItemIndex;
      FindFirst(Path, Attr, F);end;

 if ComboBox1.ItemIndex <> 5 then
 begin
ComboBox1.ItemIndex:= faAnyFile;
     Attr := ComboBox1.ItemIndex;
      FindFirst(Path, Attr, F);end;

 if F.name <> "" then
 begin
   ListBox1.Items.Add(F.Name);
   while FindNext(F) = 0 do
     ListBox1.Items.Add(F.Name);
 end;
 FindClose(F);
end;

ну и все поиск норм получился а дальше:

а вот копировать как в этом коде нада путь задавать откуда и куда используя функцию CopyFile(это след действие имею ввиду)

if not CopyFile("c:\1.txt","d:\1Copy.txt",true)
then ShowMessage("сообщение!");


 
Overclocker ©   (2010-10-04 14:43) [5]

поис я организовал так:

procedure TForm1.Button1Click(Sender: TObject);
var
 F: TSearchRec;
 Path: string;
 Attr: Integer;
begin
 Path := e1.Text;        // е1  - edit1

 
if ComboBox1.ItemIndex <> 0 then
begin
ComboBox1.ItemIndex:= faReadOnly;
   Attr := ComboBox1.ItemIndex;
      FindFirst(Path, Attr, F);
       end ;

   if ComboBox1.ItemIndex <> 1 then
begin ComboBox1.ItemIndex:= faHidden;
   Attr := ComboBox1.ItemIndex;
      FindFirst(Path, Attr, F);
        end;

 if ComboBox1.ItemIndex <> 2 then
 begin
ComboBox1.ItemIndex:= faSysFile;
   Attr := ComboBox1.ItemIndex;
      FindFirst(Path, Attr, F);end;

 if ComboBox1.ItemIndex <> 3 then
 begin
ComboBox1.ItemIndex:= faArchive ;     Attr := ComboBox1.ItemIndex;
      FindFirst(Path, Attr, F);end;

 if ComboBox1.ItemIndex <> 4 then  begin
ComboBox1.ItemIndex:= faDirectory;       Attr := ComboBox1.ItemIndex;
      FindFirst(Path, Attr, F);end;

 if ComboBox1.ItemIndex <> 5 then
 begin
ComboBox1.ItemIndex:= faAnyFile;
     Attr := ComboBox1.ItemIndex;
      FindFirst(Path, Attr, F);end;

 if F.name <> "" then
 begin
   ListBox1.Items.Add(F.Name);
   while FindNext(F) = 0 do
     ListBox1.Items.Add(F.Name);
 end;
 FindClose(F);
end;

ну и все поиск норм получился а дальше:

а вот копировать как в этом коде нада путь задавать откуда и куда используя функцию CopyFile(это след действие имею ввиду)

if not CopyFile("c:\1.txt","d:\1Copy.txt",true)
then ShowMessage("сообщение!");


 
MBo ©   (2010-10-04 15:15) [6]

с Combobox  - впечатлило. Зачем это?


 
Overclocker ©   (2010-10-04 15:24) [7]

да думал может искать прежде самому задавать атрибуты, честно с combobox не робит все равно в итоге ищет не зависимо от атрибутов ))


 
Юрий Зотов ©   (2010-10-04 15:39) [8]

А в чем проблема?

1. Юзер указывает каталог с файлами.
2. Через FindFirst и пр. создаем список имен файлов (TStringList).
3. Идем по этому списку в цикле и для каждого файла:
3.1. Зная его имя, формируем имя каталога, в который его надо положить.
3.2. Если такого каталога нет, то создаем его.
3.3. Копируем файл.

Проблем не вижу никаких. Час работы.


 
Anatoly Podgoretsky ©   (2010-10-04 16:02) [9]

Из него 50 минут на перекур.


 
Юрий Зотов ©   (2010-10-04 16:09) [10]

Причем список файлов даже лишний - все можно сделать в цикле поиска файлов.


 
Overclocker ©   (2010-10-04 16:28) [11]

мммм есть исходники или код хотябы посмотреть? код копирования и создания папки?


 
Плохиш ©   (2010-10-04 16:42) [12]

Стоит заняться поисками студента, за небольшую сумму напишет.


 
Overclocker ©   (2010-10-04 16:49) [13]


> 1. Юзер указывает каталог с файлами.2. Через FindFirst и
> пр. создаем список имен файлов (TStringList).3. Идем по
> этому списку в цикле и для каждого файла:3.1. Зная его имя,
>  формируем имя каталога, в который его надо положить.3.2.
>  Если такого каталога нет, то создаем его.3.3. Копируем
> файл.


я понял алгоритм и понял что куда только один вопрос остается не понятен:
через какую переменную или объект указывать путь для создания папки , и при копировании файла в эту папку как написать? какой тип переменной должен быть...?


 
Плохиш ©   (2010-10-04 17:02) [14]

Надо прочитать в любой книжке по используемому средству разработки самый первый раздел, там описываются типы переменных, работу с переменными и операции с ними же.


 
Anatoly Podgoretsky ©   (2010-10-04 17:03) [15]

> Юрий Зотов  (04.10.2010 16:09:10)  [10]

Тогда еще 5 минут скидываем.


 
stas ©   (2010-10-04 17:08) [16]

Непонял в чем проблема с путями... вот пример копирования всего из папки+проверка на актуальность, вместе с подчиненными папками.

Procedure UpdateFiles(PathSource,PathDest: string);
var
FD,FD1 : TWin32FindData;
FH,FH1 : THandle;
TempSize: TULargeInteger;
SR:TsearchRec;
ST1,ST2:STring;
begin
If (PathSource="") or (PathDest="") then exit;
 if PathSource[length(PathSource)]<>"\" Then PathSource:=PathSource+"\";
 if PathDest[length(PathDest)]<>"\" Then PathDest:=PathDest+"\";
ST1:=PathSource;
ST2:=PathDest;
// showMessage (ST1);
if not(DirectoryExists(PathSource)) then exit;
if not(DirectoryExists(PathDest)) then MkDir(PathDest);

FH := FindFirstFile( PChar( PathSource + "*.*" ), FD );
repeat
  if (FH<>INVALID_HANDLE_VALUE) and (FD.cFileName <> string(".")) and
                                             (FD.cFileName<>string("..")) then
    begin
      if (FILE_ATTRIBUTE_DIRECTORY and FD.dwFileAttributes) <> 0 then
      begin
        if  not DirectoryExists (ST2+FD.cFileName) then mkDir (ST2+FD.cFileName);
        UpdateFiles(ST1 + FD.cFileName + "\",ST2+FD.cFileName+"\")
      end
      else
     begin
     FindFirstFile (Pchar(ST2+FD.cFileName),FD1);
     if  (ExtractFileExt(FD.cFileName)=".udl") then
      begin
         FileSetAttr(Pchar(ST2+"\"+FD.cFileName), faArchive);
        // if FileExists (ST2+"\"+FD.cFileName) then DeleteFile (ST2+"\"+FD.cFileName);
        CopyFile ( Pchar(ST1+"\"+FD.cFileName),Pchar(ST2+"\"+FD.cFileName),false);
      end else

     if (not FileExists (ST2+FD1.cFileName)) {or  ((fd1.ftLastWriteTime.dwHighDateTime*High(DWord)+Fd1.ftLastWriteTime.dwLowDateTime)<>(fd.ftLastWriteTime.dwHighDateTime*High(DWor d)+Fd.ftLastWriteTime.dwLowDateTime))} or (fd1.ftLastWriteTime.dwHighDateTime<>Fd.ftLastWriteTime.dwHighDateTime) then
     begin
//      Form1.Label3.Caption:="Копирую файл: "+FD.cFileName;
  //   if ((paramstr(1)="/s") or (paramstr(1)="/S")) or (FD.cFileName<>"soft.udl") then
  if FileExists (ST2+"\"+FD.cFileName) then DeleteFile (ST2+"\"+FD.cFileName);
     CopyFile ( Pchar(ST1+"\"+FD.cFileName),Pchar(ST2+"\"+FD.cFileName),false);
    //  CopyFolder  (ST1+"\"+FD.cFileName,ST2+"\"+FD.cFileName,FH1);
     end;
     end;
    end;
until FindNextFile(FH,FD) = false;
FindClose (SR);
end;


 
Плохиш ©   (2010-10-04 17:24) [17]


> stas ©   (04.10.10 17:08) [16]

Ты [13] хорошо прочитал?


 
stas ©   (2010-10-04 17:31) [18]

Плохиш ©   (04.10.10 17:24) [17]
Прочел хорошо, но я непонял чего непонятно, как со строкой работать или что?


 
Overclocker ©   (2010-10-04 17:41) [19]


> stas ©   (04.10.10 17:31) [18]


исходники есть?


 
Плохиш ©   (2010-10-04 17:45) [20]


> Overclocker ©   (04.10.10 17:41) [19]

Ты не правильно попрашайничаешь. Надо так:

КОД ДАВАЙ!!!!!!!!!!


 
Overclocker ©   (2010-10-04 18:07) [21]

дайте плиз код :) !!!!!!


 
Dennis I. Komarov ©   (2010-10-04 18:10) [22]

Какой код? В [8] Юрий Сергеевич уже разжевал все...


 
Andy BitOff ©   (2010-10-04 18:10) [23]

> Overclocker ©   (04.10.10 16:49) [13]
> через какую переменную или объект указывать путь для создания
> папки , и при копировании файла в эту папку как написать?
> какой тип переменной должен быть...?



> stas ©   (04.10.10 17:08) [16]
> ST1,ST2:STring;
> FD,FD1 : TWin32FindData;

> CopyFile ( Pchar(ST1+"\"+FD.cFileName),Pchar(ST2+"\"+FD.cFileName) ,false);


 
stas ©   (2010-10-04 18:11) [24]

Overclocker ©   (04.10.10 17:41) [19]
Здрасте! а в [16] что ?


 
Andy BitOff ©   (2010-10-04 18:13) [25]

А, да, перед копированием ForceDirectory выполнить


 
Overclocker ©   (2010-10-04 18:25) [26]

все разобрался спасибо всем:)


 
Overclocker ©   (2010-10-04 18:39) [27]


> Andy BitOff ©   (04.10.10 18:13) [25]
> А, да, перед копированием ForceDirectory выполнить


то есть как это сделать?


 
Overclocker ©   (2010-10-04 18:58) [28]

а допустим вручную пути прописывать откуда и куда копировать .. как это реализовать????


 
Плохиш ©   (2010-10-04 19:31) [29]

обучение программированию на форуме - бессмысленная потеря времени.


 
Anatoly Podgoretsky ©   (2010-10-04 19:35) [30]

> Плохиш  (04.10.2010 19:31:29)  [29]

Обучение работе с FindFirst особо бессмыслено, столько пытались и все в
пустую. Пусть лучше учится работать с поиском.


 
Andy BitOff ©   (2010-10-04 22:32) [31]

> Overclocker ©   (04.10.10 18:39) [27]
> то есть как это сделать?

Вызвать функцию ForceDirectory (так помоему) с соответствующим параметром. Читай справку.



Страницы: 1 вся ветка

Текущий архив: 2010.12.26;
Скачать: CL | DM;

Наверх




Память: 0.55 MB
Время: 0.009 c
15-1283932268
boriskb
2010-09-08 11:51
2010.12.26
Опять "Academia"


2-1285874599
faiwer
2010-09-30 23:23
2010.12.26
Главная форма и модальные окна


15-1284728859
12
2010-09-17 17:07
2010.12.26
Шахматы. А как бы Вы сыграли?


15-1284390803
Eraser
2010-09-13 19:13
2010.12.26
Book reader - какой лучше?


2-1285455023
Германн
2010-09-26 02:50
2010.12.26
Resize формы