保存文件> Memo delphi的文件夹

时间:2012-10-28 01:32:54

标签: delphi

我是法国人,对我的小语言感到抱歉......

所以,我的项目在Memo and create file and folder?

我的代码有问题:

var
  path: String;
  F: TextFile;
  i, e: Integer;
begin
  for i := 0 to Memo1.Lines.Count - 1 do
  begin
    if Length(Memo1.Lines[i]) > 0 then
    begin
      if Memo1.Lines[i][1] = '\' then // first character for file
        if Pos('.', Memo1.Lines[i]) > 0 then // confirm file
        begin
          path := extractfilepath(Edit1.Text) + Memo1.Lines[i];
          // showmessage(path);
          if not FileExists(path) then
          begin
            AssignFile(F, path);
            Rewrite(F);
            CloseFile(F);
          end;
        end;
      e := Length(Memo1.Lines[i]);
      case Memo1.Lines[i][e] of // last character for folder
        '\':
          begin
            path := extractfilepath(Edit1.Text) + Memo1.Lines[i];
            if not DirectoryExists(path) then
              ForceDirectories(path); // create folder
          end;
      end;
    end;
  end;
end;

我在Tmemo的结构是:

structure of tmemo

我的结果不好:

bad result

我测试第一个和最后一个字符,知道它是什么文件或文件夹,我的问题是文件保存在currentPath中,no在folder1中:

导演:

 folder1->file1.txt 
  folder2 ->file2.txt and file2-3.txt
   etc..
你可以帮我吗?

非常感谢。

2 个答案:

答案 0 :(得分:1)

你必须先测试。
is the token a directory然后isFolder:=true

“memo2”即将创建文件.txt更容易。 (更方便)

Delphi 5

implementation

{$R *.DFM}

uses FileCtrl;

procedure TForm1.FormActivate(Sender: TObject);
begin
Memo1.Text:='test.txt'#13#10'folder1\'#13#10'\file1.txt'#13#10'folder2\'#13#10'\file2.txt'#13#10'\file2-3.txt'#13#10;
Memo2.Text:='';
Edit1.Text:='F:\testdir';
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  path,aktpath,actToken: String;
  backSl : Char;
  i: Integer;
  isFolder:Boolean;
begin
backSl := #92; // This only for better reading the code in SO
isFolder:=false;
aktpath:='';actToken:='';
  for i := 0 to Memo1.Lines.Count - 1 do
  begin
    if Length(Memo1.Lines[i]) > 0 then
    begin
      actToken:=Memo1.Lines[i];
      // Folder -----------------------------------------
      if copy(actToken,length(actToken),1)= backSl then begin
      if copy(Edit1.Text,length(Edit1.Text),1)= backSl then
                  path := Edit1.Text + actToken else
                  path := Edit1.Text + backSl + actToken;
         if not DirectoryExists(path) then
              ForceDirectories(path); // create folder
      isFolder:=true;
      aktpath:=path;
      continue;
      end;
      // File   -----------------------------------------
      if copy(actToken,1,1) = backSl then // first character for file
        if Pos('.', actToken) > 0 then // confirm file
        begin
          if isFolder then path:=aktpath + actToken else
                           path:=Edit1.Text + actToken;
          path:=StringReplace(path,'\\',backSl,[rfReplaceAll]);
          if not FileExists(path) then Memo2.Lines.SaveToFile(path);
          continue;
        end;
    end;
  end;
end;

end.

更新:\ file1.txt:世界问好

var
[...]
actTokenTxt: String;
count: Integer;

begin
isFolder:=false;
[...]


// File   -----------------------------------------
      if copy(actToken,1,1) = backSl then // first character for file
        if Pos('.', actToken) > 0 then // confirm file
        begin
          count:=Pos(':', actToken);
          if count > 0 then begin
              actTokenTxt:=copy(actToken,1,count);
              Memo2.Text:=StringReplace(actToken,actTokenTxt,'',[]);
              actToken:=copy(actToken,1,count-1);;
          end;
          if isFolder then path:=aktpath + actToken else
                           path:=Edit1.Text + actToken;
          path:=StringReplace(path,'\\',backSl,[rfReplaceAll]);
          if not FileExists(path) then Memo2.Lines.SaveToFile(path);
          continue;
        end;

请记住删除file1.txt(如果存在)
如果没有Memo2.Text:='',请不要忘记设置:否则,所有相同文本的文件!!
试试if count > 0 then begin [...] else Memo2.Text:=''

答案 1 :(得分:1)

var
  folder_path, path: String;
  F: TextFile;
  i, e, num: Integer;

begin
  for i := 0 to Memo1.Lines.Count - 1 do
  begin
    if Length(Memo1.Lines[i]) > 0 then
    begin
      e := Length(Memo1.Lines[i]);
      if Memo1.Lines[i][e] = '\' then // last character for folder
      begin
        num := StrToInt(Memo1.Lines[i][7]);
        folder_path := Copy(Memo1.Lines[i], 1, Length(Memo1.Lines[i])-1);
        path := extractfilepath(Edit1.Text) + Memo1.Lines[i];
        //showmessage(path);
        if not DirectoryExists(folder_path) then
          ForceDirectories(folder_path); // create folder
      end

      else if Memo1.Lines[i][1] = '\' then // first character for file
        if Pos('.', Memo1.Lines[i]) > 0 then // confirm file
        begin
          if (num = StrToInt(Memo1.Lines[i][6])) then
            path := extractfilepath(Edit1.Text) + folder_path + Memo1.Lines[i]
          else path := extractfilepath(Edit1.Text) + Memo1.Lines[i];
          //showmessage(path);
          if not FileExists(path) then
          begin
            AssignFile(F, path);
            Rewrite(F);
            CloseFile(F);
          end;
        end;
    end;
  end;
end;

这假设folder#将始终是#= number的文件夹字符串。 与文件类似。