Я пытался писать в своем собственном каталоге
The app's install directory is a read-only location.
читать из C: \ данные, чтобы читать из C: \ MYDIR (вновь созданный, учитывая каждый пользователь имеет полный доступ), но не имеет права читать (или писать).
Not all folders on your device are accesible by Universal Windows Apps. To make a folder accesible to a UWP app, you can use FolderPermissions tool. For example run FolderPermissions c:\test -e to give UWP apps access to c:\test folder. Note this will work only with native Win32 apis for eg. CreateFile2 and not with WinRT apis like StorageFolder, StorageFile etc.
Чтобы использовать Win32 API ReadFile вам нужно использовать PInvoke. Код, как это:
/*Part1: preparation for using Win32 apis*/
const uint GENERIC_READ = 0x80000000;
const uint OPEN_EXISTING = 3;
System.IntPtr handle;
[System.Runtime.InteropServices.DllImport("kernel32", SetLastError = true, ThrowOnUnmappableChar = true, CharSet = System.Runtime.InteropServices.CharSet.Unicode)]
static extern unsafe System.IntPtr CreateFile
(
string FileName, // file name
uint DesiredAccess, // access mode
uint ShareMode, // share mode
uint SecurityAttributes, // Security Attributes
uint CreationDisposition, // how to create
uint FlagsAndAttributes, // file attributes
int hTemplateFile // handle to template file
);
[System.Runtime.InteropServices.DllImport("kernel32", SetLastError = true)]
static extern unsafe bool ReadFile
(
System.IntPtr hFile, // handle to file
void* pBuffer, // data buffer
int NumberOfBytesToRead, // number of bytes to read
int* pNumberOfBytesRead, // number of bytes read
int Overlapped // overlapped buffer
);
[System.Runtime.InteropServices.DllImport("kernel32", SetLastError = true)]
static extern unsafe bool CloseHandle
(
System.IntPtr hObject // handle to object
);
public bool Open(string FileName)
{
// open the existing file for reading
handle = CreateFile
(
FileName,
GENERIC_READ,
0,
0,
OPEN_EXISTING,
0,
0
);
if (handle != System.IntPtr.Zero)
{
return true;
}
else
{
return false;
}
}
public unsafe int Read(byte[] buffer, int index, int count)
{
int n = 0;
fixed (byte* p = buffer)
{
if (!ReadFile(handle, p + index, count, &n, 0))
{
return 0;
}
}
return n;
}
public bool Close()
{
return CloseHandle(handle);
}
/*End Part1*/
/*Part2: Test reading */
private void ReadFile()
{
string curFile = @"c:\test\mytest.txt";
byte[] buffer = new byte[128];
if (Open(curFile))
{
// Assume that an ASCII file is being read.
System.Text.ASCIIEncoding Encoding = new System.Text.ASCIIEncoding();
int bytesRead;
do
{
bytesRead = Read(buffer, 0, buffer.Length);
string content = Encoding.GetString(buffer, 0, bytesRead);
System.Diagnostics.Debug.WriteLine("{0}", content);
}
while (bytesRead > 0);
Close();
}
else
{
System.Diagnostics.Debug.WriteLine("Failed to open requested file");
}
}
/*End Part2*/
ПРИМЕЧАНИЕ: Вот некоторые небезопасным код, который не может быть опубликован в магазин. Но это не беспокоит вас, если вы просто используете его в ядре Windows IoT.
Ничего себе, не знаю, окна IoT поддерживают WPF, как вы это сделали? – Jackie
Это стартовый проект. Нажмите кнопку, и светодиод идет вперед и назад. – Michel
Я думал, что окна IoT поддерживают только UWP, не знаю, WPF работает на Windows IoT. – Jackie