我是法国人,对我的小语言感到抱歉......
所以,我的项目在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的结构是:
我的结果不好:
我测试第一个和最后一个字符,知道它是什么文件或文件夹,我的问题是文件保存在currentPath中,no在folder1中:
导演:
folder1->file1.txt
folder2 ->file2.txt and file2-3.txt
etc..
你可以帮我吗?
非常感谢。
答案 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的文件夹字符串。
与文件类似。