لینوکس برای توسعهدهندگان داتنت: از ویندوز تا کراس-پلتفرم؛ بخش اول: تفاوتهای بنیادین سیستمعامل
نویسنده: وحید نصیری
تاریخ: ۱۴۰۴/۰۴/۲۵ ۰۸:۰۵
آدرس: www.dntips.ir
| مطالب | ۳۶۹۴ |
| نویسندگان | ۲۷۶ |
| گروههای مطالب | ۱۰۲۴ |
| نقشههای راه | ۱۱۹ |
| دورهها | ۱۴ |
| اشتراکها | ۱۷۹۱۴ |
C:\، D:\ و...). هر درایو یک ریشهی جداگانه دارد و ساختار فایلها زیرمجموعهی آن است.C:\Users\Me\Documents\MyProject/ قرار دارد. در لینوکس مفهومی به نام "درایو" وجود ندارد. سایر پارتیشنها و دستگاهها (مانند فلش مموری) در پوشههایی زیر این ریشهی اصلی mount (سوار) میشوند./home/me/documents/myproject"C:\\logs\\log.txt") در کد خود بنویسید، زیرا این مسیر در لینوکس کاملاً بیمعنی است.MyFile.txt، myfile.txt و MYFILE.TXT همگی به یک فایل واحد اشاره دارند.MyFile.txt، myfile.txt و MYFILE.TXTسه فایل کاملاً مجزا هستند.// این کد در ویندوز بدون مشکل کار میکند،
// حتی اگر نام واقعی فایل "appsettings.json" باشد.
string configJson = File.ReadAllText("AppSettings.json");AppSettings.json نباشد و مثلاً appsettings.json باشد، بلافاصله با خطای FileNotFoundException مواجه خواهد شد.\ برای جدا کردن پوشهها استفاده میشود. مثال: C:\Windows\System32/ برای جدا کردن پوشهها استفاده میشود. مثال: /var/log// 👎 کد وابسته به پلتفرم (فقط در ویندوز کار میکند) string userName = "myuser"; string filePath = "C:\\Users\\" + userName + "\\Documents\\report.pdf";
Path.CombineSystem.IO.Path در داتنت دوست شماست. متد Combine به صورت هوشمند و بر اساس سیستمعاملی که کد روی آن اجرا میشود، از کاراکتر جداساز صحیح استفاده میکند.// 👍 کد کراس-پلتفرم و صحیح string userProfile = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile); // مسیر پوشه home کاربر را به درستی در هر دو سیستمعامل میدهد string fileName = "report.pdf"; // Path.Combine به طور خودکار از "/" در لینوکس و "\" در ویندوز استفاده میکند string fullPath = Path.Combine(userProfile, "Documents", fileName); Console.WriteLine(fullPath);
C:\Users\myuser\Documents\report.pdf/home/myuser/Documents/report.pdfPath.DirectorySeparatorChar استفاده کنید، هرچند Path.Combine معمولاً گزینهی بهتری است./var/log/myapp/ ایجاد کند، اما با خطای System.UnauthorizedAccessException: Access to the path '/var/log/myapp/app.log' is denied مواجه میشود.www-data برای یک وب سرور)، مجوز نوشتن (Write) در آن پوشه را ندارد.chmod میتوانید مجوزها را تغییر دهید. برای مثال، برای دادن مجوز اجرا به فایل اپلیکیشن خود:chmod +x ./MyWebApp
chown میتوانید مالک فایل یا پوشه را به کاربری که برنامه را اجرا میکند تغییر دهید.# مالکیت پوشه لاگ را به کاربر www-data میدهیم chown -R www-data:www-data /var/log/myapp
\r\n نمایش داده میشود.\n مشخص میشود..sh) که در ویندوز نوشته شده، ممکن است در لینوکس به دلیل وجود کاراکتر \r اجرا نشود."\r\n" یا "\n" به صورت ثابت، از Environment.NewLine استفاده کنید. این پراپرتی به صورت خودکار مقدار صحیح را بر اساس سیستمعامل جاری برمیگرداند.// 👍 کد کراس-پلتفرم برای نوشتن دو خط در یک فایل
string text = "Line 1" + Environment.NewLine + "Line 2";
File.WriteAllText("myFile.txt", text);