Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2010.12.26;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.53 MB
Время: 0.005 c
2-1285833478
Jacksotnik
2010-09-30 11:57
2010.12.26
Помогите с запросом


3-1250065947
RDen
2009-08-12 12:32
2010.12.26
Доброго всем времени суток.


15-1284723086
И. Павел
2010-09-17 15:31
2010.12.26
Как преобразовать строку "123" в "1,2,3" в MS SQL 2005


2-1286078679
mdel
2010-10-03 08:04
2010.12.26
юникод в delphi7


15-1284582567
Юрий
2010-09-16 00:29
2010.12.26
С днем рождения ! 16 сентября 2010 четверг





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский