PDA

View Full Version : تشخیص نام فایل در دلفی



parniaorfi
چهارشنبه 18 مرداد 1391, 10:04 صبح
چطور می تونم نام یه فایل txt که می تونه هر دفعه یه نام دلخواه باشه رو توی دلفی تشخیص بدم

BORHAN TEC
چهارشنبه 18 مرداد 1391, 11:14 صبح
ما که چیزی متوجه نشدیم که چکار می خواهید بکنید. لطفاً بیشتر توضیح دهید تا ما هم بر حسب حدس و گمان پاسخ ندهیم.

mbshareat
چهارشنبه 18 مرداد 1391, 12:02 عصر
اگه محتواش ثابت باشه می تونین از TStringList استفاده کنین و بخونینش و ببینین همون فایله یا نه.

parniaorfi
شنبه 21 مرداد 1391, 11:09 صبح
من میخوام نام یه فایل متنی رو در یه مسیر مشخص تشخیص بدم که این فایل رو کاربران برنامه با هر نامی که دوست داشته باشند در این مسیر قرار می دهند و محتواش هم می تونه متغییر باشه

Felony
شنبه 21 مرداد 1391, 11:20 صبح
سوالت رو کامل بپرس ؛ نام فایل رو تشخیص بدی یعنی چی ؟ این سوالات میتونه چند معنی داشته باشه ، مثلا :

- کاربر توسط Open Dialog یا ... فایل رو انتخاب میکنه و شما میخوای نام فایلی که انتخاب کرده تشخیص بدی ؟ ( اگر سوالت همینه جوابت تابه ExtractFileName هست )
- تو پوشه برنامه فقط یک فایل با فرمت txt وجود داره و شما قصد داری اسمش رو در بیاری ؟ ( اگر سوالات این هست جوابت توابع FindFirst و FineNext هست ، اگر از دلفی 2009 به بعد استفاده میکنی میتونی از TDirectory از کتابخانه IOUtils هم استفاده کنی )

parniaorfi
یک شنبه 22 مرداد 1391, 10:51 صبح
ممنونم از راهنماییتان
منظور وجود یه فایل تو پوشه بود

mbshareat
یک شنبه 22 مرداد 1391, 13:35 عصر
سلام
توسط چیزی مثل این میشه فهمید در شاخه اصلی درایو C فایل متنی وجود داره یانه؟
FileExists('C:\*.txt')
برای اینکه اسم فایل رو هم بدونین یه FileListBox بذار روی فرم و مخفیش کن(مثلا ;FileListBox1.Visible:=False) .نوع فایل لیست شونده در این کامپوننت رو تنظیم کن(;'FileListBox1.Mask:='*.txt) و دایرکتوری اون رو تنظیم کن روی شاخه مورد نظر(مثلا ;'FileListBox1.Directory:='C) بعد ببین اگه FileListBox1.Items.Count بیشتر از صفر بود یعنی فایلی با مشخصات مورد نظر داری. می تونی اسم فایل رو با اضافه کردن شاخه مورد نظر به آیتم بدست بیاری.اگه تنها یه فایل تو شاخه باشه اینظوری:
FileListBox1.Directory+'\'+FileListBox1.Items[0]

Felony
یک شنبه 22 مرداد 1391, 14:03 عصر
سلام
توسط چیزی مثل این میشه فهمید در شاخه اصلی درایو C فایل متنی وجود داره یانه؟
FileExists('C:\*.txt')
برای اینکه اسم فایل رو هم بدونین یه FileListBox بذار روی فرم و مخفیش کن(مثلا ;FileListBox1.Visible:=False) .نوع فایل لیست شونده در این کامپوننت رو تنظیم کن(;'FileListBox1.Mask:='*.txt) و دایرکتوری اون رو تنظیم کن روی شاخه مورد نظر(مثلا ;'FileListBox1.Directory:='C) بعد ببین اگه FileListBox1.Items.Count بیشتر از صفر بود یعنی فایلی با مشخصات مورد نظر داری. می تونی اسم فایل رو با اضافه کردن شاخه مورد نظر به آیتم بدست بیاری.اگه تنها یه فایل تو شاخه باشه اینظوری:
FileListBox1.Directory+'\'+FileListBox1.Items[0]

راه حل فنی و درست کار رو من در پست قبلیم گفتم ، برای چی دوباره یک راه حل غیر فنی ارائه میدید ؟
با این کار کاربر سوال کننده رو به شک میندازید ؛ تو این نوع سوالات اصولا راه حل فنی و اصولی کمی پیچیده هست و وقتی یکی میاد و یک راه ساده تر ( گرچه کاملا غیر فنی ) ارائه میده کاربر سوال کننده حتما اون راه حل غیر فنی رو انتخاب میکنه چون به اطلاعات خودش نزدیکتر هست و نیازی نداره کمی به خودش زحمت بده و در مورد مطلب فنی ارائه شده تحقیق کنه و چیز جدیدی یاد بگیره ، در آخر این میشه که شبه برنامه نویس ها به وجود میان و وضع تخصصی ترین انجمن برنامه نویسی ایران این میشه که میبینید !

این یک نمونه کد برای دلفی 2009 به بعد :

function GetFileName(Directory: string): string;
var
Files: TStringDynArray;
begin
Files := TDirectory.GetFiles(Directory, '*.txt');
if (Length(Files) <> 0) then
Result := Files[0]
else
Result := '';
end;

کتابخانه Types و IOUtils رو به Uses اضافه کنید .

موفق باشید .

بهروز عباسی
یک شنبه 22 مرداد 1391, 14:04 عصر
ممنونم از راهنماییتان
منظور وجود یه فایل تو پوشه بود
درود به همه
دوست عزیز جناب Mahan-1363 پاسختون رو دادن!

- تو پوشه برنامه فقط یک فایل با فرمت txt وجود داره و شما قصد داری اسمش رو در بیاری ؟ ( اگر سوالات این هست جوابت توابع FindFirst و FineNext هست ، اگر از دلفی 2009 به بعد استفاده میکنی میتونی از TDirectory از کتابخانه IOUtils هم استفاده کنی )
--------------------------------------------------------
لیست کلیه فایلهای یک پوشه-
procedure ListFileDir(Path: string; FileList: TStrings);
var
SR: TSearchRec;
begin
if FindFirst(Path + '*.*', faAnyFile, SR) = 0 then
begin
repeat
if (SR.Attr <> faDirectory) then
begin
FileList.Add(SR.Name);
end;
until FindNext(SR) <> 0;
FindClose(SR);
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
ListFileDir('C:\WINDOWS\', ListBox1.Items);
end;