4

私はフランス語なので、私の小さな言語で申し訳ありません...

それで、私のプロジェクトはここにありますメモとファイルとフォルダーを作成しますか?

私のコードに問題があります:

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 の私の構造は次のとおりです。

tメモの構造

そして私の悪い結果:

悪い結果

ファイルまたはフォルダーが何であるかを知るために最初と最後の文字をテストしますが、私の問題は currentPath に保存されたファイルであり、folder1 にはありません:

方向:

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

私を助けてくれませんか?

どうもありがとう。

4

2 に答える 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.

更新: \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:=''

于 2012-10-28T03:50:28.823 に答える
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#これは、それが常に # = 番号のフォルダー文字列であると想定しています。ファイルと同様。

于 2012-10-28T03:51:12.787 に答える