Environment.SpecialFolders in Silverlight 4 on Mac - silverlight

Silverlight 4 running with elevated permissions provides access to certain special folders in the file system.
http://msdn.microsoft.com/en-us/library/system.environment.specialfolder(VS.95).aspx
These work great on Windows, but what do they map to on Mac OSX systems?
My application needs to access "My Documents". Will this map somewhere sensible on the mac?

Yes, but with a little trick.
You can create a file on windows even the containing folder does not exist, but on OS X your have to create the directory first. If not you will get an exception.
My code is as follow:
Directory.CreateDirectory(dirPath); // Not necessary on windows
FileStream newFs = File.Create(dirFile);
newFs.Close();
newFs.Dispose();
On OS X the "My Documents" folder is here:
/Users/[UserName]/Documents

Related

Windows file and path names for local drive with CreateFile() WinAPI

An application that has been running just fine with Windows XP and Windows 7 suddenly developed problems with Windows 10 Pro. However, with Windows 10 IoT Enterprise, it seems to work fine. It also seemed to work fine back in May of 2018 with Windows 10, yet with newer installs of Windows 10, it doesn't work.
After some investigation, we found that the application seems to be unable to create the set of files that it uses for persistent data with Windows 10 Pro.
Looking further, we found that the complete pathname was incorrect. It appears that the pathname to the directory where files were being stored, though not properly constructed, worked fine with Windows XP and Windows 7, but not with Windows 10 Pro.
The pathname being generated looked like this (those are path backslashes and not C/C++ backslashes for escaping a character):
\C:\DirA\DirB\DirC
while the corrected pathname being generated looks like this:
\\.\C:\DirA\DirB\DirC
Reading MSDN's article on Naming Files, Paths, and Namespaces, I am a bit confused about what appears to be a number of different ways that a valid pathname can be constructed. It appears that different Windows filesystems (FAT16, FAT32, NTFS, etc.) have different naming conventions.
What is the pathname format I should use so that my application will be able to create and open files in a specific directory on a local drive C: with multiple different versions of Windows? I am specifically interested in Windows 7, POSReady 7, Windows 10, and Windows 10 IoT Enterprise (which is not the same as Windows 10 IoT).
I am using the Win32 API CreateFile() function to create/open the files.
What is the pathname format I should use so that my application will be able to create and open files in a specific directory on a local drive C: with multiple different versions of Windows?
You should be using:
C:\DirA\DirB\DirC
Or, if you need to access a pathname longer than MAX_PATH, and don't/can't opt in to the new longPathAware feature introduced in Windows 10 version 1607:
\\?\C:\DirA\DirB\DirC
DO NOT use \C:\DirA\DirB\DirC, this is not correctly formatted.
You should not need to use \\.\C:\DirA\DirB\DirC, though it will work. Just be aware that:
The "\\.\" prefix will access the Win32 device namespace instead of the Win32 file namespace.
Typically, you would use \\.\ only when accessing local devices, like physical volumes, serial/parallel ports, named pipes, mailslots, etc. Not when accessing entries on the file system.

How to synchronize code files on windows with WSL/linux?

Basically I have some C/C++ code that I need to build and debug on a Linux machine. Unfortunately, my windows laptop doesn't have enough free hard space to install some Linux dist nor does it have enough free RAM to comfortably run VM.
Until now, I dealt with it rather comfortably using WSL, but the scale was rather small. It was easy to edit and debug 2-3 .c files through CLI and gdb, but it became really annoying on a large scale projects.
I want something simple as "edit code in windows IDE [X], compile it on remote Linux/WSL (the project uses Makefiles), and preferably debug it via gdb".
VS has something close to what I want, but it can't deal with existing Linux projects. It needs to create a new configuration which is alien to the project's Makefile.
I know this question is a bit old, but I think the solution is to make a symlink between your WSL folder and the Window's folder. This is how I handled it for a Ubuntu-20.04 WSL:
Access PowerShell in Administrator mode
Type cmd.exe in the PowerShell
Once cmd.exe is opened, type mklink /d C:\<path_to_your_Windows_folder> \\wsl$\Ubuntu-20.04\home\<your_user>\<path_to_your_WSL_folder>
EDIT
This was tested under Windows 10 Version 2004 with WSL2
I'm unsure about C and C++ but it sounds like this is exactly the same as how i work in node and javascript every day.
I checkout my code using git inside WSL to a location like /mnt/c/code/myproject. Then using sublime/VS code/webstorm i edit the files in windows in the location c:\code\myproject this works really well and have been doing this every day for over a year.
Things to be aware of are that you need to ensure that your editor of choice saves files with linux line endings and that all command line operations are done inside WSL.
Please see this article to see the differences between windows and linux files and how this works inside the WSL.
I want something simple as "edit code in windows IDE , compile it on remote linux/WSL
You will have something as simple as that.
Only with Windows 19.03 though:
See "Updated WSL in Windows 10 version 1903 lets you access Linux files from Windows"
Microsoft's Craig Loewen says:
In the past, creating and changing Linux files from Windows resulted in losing files or corrupting data. Making this possible has been a highly requested and long anticipated feature. We're proud to announce you can now easily access all the files in your Linux distros from Windows.
So how does this work? He goes on to explain:
To put it briefly: a 9P protocol file server facilitates file related requests, with Windows acting as the client.
We've modified the WSL init daemon to include a 9P server. This server contains protocols that support Linux metadata, including permissions.
There is a Windows service and driver that acts as the client and talks to the 9P server (which is running inside of a WSL instance).
Client and server communicate over AF_UNIX sockets, since WSL allows interop between a Windows application and a Linux application using AF_UNIX as described in this post.
Warning:
The old rules still apply, you should NOT access your Linux files inside of the AppData folder!
If you try to access your Linux files through your AppData folder, you are bypassing using the 9P server, which means that you will not have access to your Linux files, and you could possibly corrupt your Linux distro.

Best location for sqlite db file on mac OSX

I am deploying a Delphi Firemonkey app on Mac OSX and being new to Mac programming I am wondering where I should install the sqlite database file.
Under Windows I usually put it in the application installation directory but this isn't appropriate on a Mac (I think!).
There will not be a need for multi-user access to the db file
I have currently placed it in /Library/Application Support/Myapp/Myapp.db but wonder if there is a better (or official) place to put it.
I'd suggest that you take a look at the guidelines from Apple.
You can use '/Library/Application Support/Myapp/Myapp.db' if the database does not contain user specific data. Otherwise use '~/Library/Application Support/Myapp/Myapp.db'.
Please don't hard code those folders, but use NSFileManager.URLForDirectory for retrieving them.

cross platform reference to specific drive/directory

Is there a way to express a specific drive in both windows/linux? Windows usually uses"D:\etc" and Ubuntu/etc uses something like "/media/user/drive_name". Is there a awy to just refer to something like "/dev/sdc1" which both Windows and Ubuntu will recognize as the same drive?
I am trying to put this in a config file for a python program which can be run on an external data drive from an internal drive containing multiple OSs. The program has to refer to a separate external data drive, but I would like the program to work the same way for all of the OSs.
Is this possible?
Either you just need to account for your OS type in each machines properties file or test for the OS in the code and act accordingly.
import os
if os.name == "windows"
path = "D:/windows/path"
elif
path = "/unix/path"

Compiling applications from shared folders in a VM

I currently have many Linux VM's set up on VMware Workstation, there are some shared folders that contain source code that is held on the host computer. The issue I am having is that whenever I try to compile a file by using any compiler I get an Illegal seek error and file not recognized. Is there any way around this? I am using an Ubuntu 64-bit VM with Windows 7 as the host and the location of the shared files are on the Windows 7 hard drive.
I've run into a number of problems doing development over a network share in the past and suggest rather than sharing the files via SMB, you'll find more luck if you check in/out the files from a source control system (or simply copy them) so they're on a "local" drive on both the guest and host.

Resources