ورود

View Full Version : تبدیل \ به \\ در مسیر فایل



JalaliMehr
چهارشنبه 12 آبان 1389, 14:58 عصر
سلام .
چطور می تونیم مسیر فایل که تو یک متغیر رشته ای قرار داره مثل :c:\folder1\file2.txt رو به فرمت قابل قبول c:\\folder1\\file2.txt تبدیل کنم یعنی \ ها به \\ تبدیل بشن.

shecarchi
چهارشنبه 12 آبان 1389, 15:17 عصر
میتونی از علامت @ پشت رشته استفاده کنی

r00tkit
چهارشنبه 12 آبان 1389, 16:16 عصر
میتونی از علامت @ پشت رشته استفاده کنی

نمی دونم منظورت از پشت رشته چیه ولی تو C# از @ در بیرون از رشته استفاده می شه در c/c++ در داخل رشته بعد از "

pswin.pooya
چهارشنبه 12 آبان 1389, 17:43 عصر
چطور می تونیم مسیر فایل که تو یک متغیر رشته ای قرار داره مثل :c:\folder1\file2.txt رو به فرمت قابل قبول c:\\folder1\\file2.txt تبدیل کنم یعنی \ ها به \\ تبدیل بشن.

فکر نکنم نیازی به این کار باشه. اینکار فقط برای کد هستش که برای فرار از دست کاراکتر \ هستش که حرف بعدی رو به شکل خاصی تفصیر میکنه مثلا \t به تب تبدیل میشه. اما زمان run-time به این مورد نیازی نیستش. با این حال میتونی یه تابع replace بنویسی که اینکار رو انجام بده

shecarchi
چهارشنبه 12 آبان 1389, 17:51 عصر
خوب اگه از اون علامته استفاده کنی مسیر به صورت متداول هم پذیرفته میشه . دیگه هم لازم نیست بک اسلش اضافی بزاری . فقط کافیه یه تابع بنویسی که این کاررو انجام بده

mehdi.mousavi
چهارشنبه 12 آبان 1389, 18:29 عصر
سلام . چطور می تونیم مسیر فایل که تو یک متغیر رشته ای قرار داره مثل :c:\folder1\file2.txt رو به فرمت قابل قبول c:\\folder1\\file2.txt تبدیل کنم یعنی \ ها به \\ تبدیل بشن.

سلام.
به این کد توجه کنید:

TCHAR szPath[MAX_PATH] = _T("c:\folder1\file2.txt");

اینجا، چون یه دونه \ داره و خیلی تصادفی حرف بعدی f بوده، در نتیجه Compiler اونو \f یا Form Feed (یعنی کاراکتر با کد 0xc یا همون 12 دسیمال) در نظر میگیره. حالا برای اینکه چنین مشکلی پیش نیاد، میتونیم با آوردن یه \ دیگه پشت اون \ تکی ها، کاراکتر مورد نظر رو Escape کنیم:

TCHAR szPath[MAX_PATH] = _T("c:\\folder1\\file2.txt");

حالا اگر محتوای szPath رو نگاه کنید، کد 0x5C یا همون 92 دسیمال رو میبینید که معادل \ هستش. در واقع چون نمیتونستیم تو کد اول به Compiler بفهمونیم که منظورمون از \ واقعا \ هستش، و نه \f، یه \ دیگه پشت \ تکی ها آوردیم.

برای آشنایی بیشتر با بقیه Character Constant ها، به این آدرس رجوع کنید (http://msdn.microsoft.com/en-us/library/6aw8xdf2%28v=VS.100%29.aspx).

نتیجه: مسیر شما با همون یک \ تعیین میشه، اما برای اینکه Compiler بفهمه که ما منظورمون از \ واقعا \ هستش، اون کاراکتر رو Escape می کنیم.

موفق باشید.

پاورقی: علامت @ تو زبان C#‎‎ معنا پیدا میکنه، در زبان C/C++‎‎ فقط می تونیم از \ برای Escape کردن کاراکتر ها استفاده کنیم. (اگرچه همینکارو در C#‎‎ هم میتونید انجام بدید که دیگه در اونصورت نیازی به استفاده از @ نیست).