在Delphi中使用Memo保存文件>文件夹

问题描述 投票:0回答:2

我是法国人,很抱歉我的语言太贫乏......

所以,我的项目是这里

我的代码有问题:

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 中,而不保存在folder1 中:

目录:

 folder1->file1.txt 
  folder2 ->file2.txt and file2-3.txt
   etc..

你能帮我解决这个 Delphi 编程问题吗?

非常感谢。

delphi
2个回答
2
投票

你必须先测试。

is the token a directory
然后
isFolder:=true

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

德尔福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.

更新:ile1.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
投票
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#
始终是带有 # = 数字的文件夹字符串。 与文件类似。

© www.soinside.com 2019 - 2024. All rights reserved.