在 c# 中使用 windows 10 iot 在 raspberry pi 存储上创建 txt 文件
Create txt file on raspberry pi storage with windows 10 iot in c#
我正在使用 raspberry pi 2 mod b 和最新的 Windows 物联网版本创建者更新。我创建了在监视器上显示数据并部署在 Pi 上的应用程序。它在 Pi 上显示 UI。我需要将这些数据保存在 Pi 存储上的文本文件中,但我无法做到这一点。
有人请帮助并提供在 C# 中使用 win 10 iot 在 Pi 存储上创建文本文件的详细信息或代码。
我尝试了以下方法,但没有成功。
要访问可移动存储,您需要像这样添加相关功能:
并像这样声明文件类型:
访问SD卡U盘(OS图像卡)需要set folder permissions for UWP app这样:
FolderPermissions U:\mytest -e
利用 PInvoke 并使用 WIN32 API CreateFile 和 WriteFile 来访问 TXT 文件。要使用这些 API,您需要在项目属性中启用不安全代码,如下所示:
这是您可以参考的示例。
/*Part1: preparation for using Win32 apis*/
const uint GENERIC_WRITE = 0x40000000;
const uint CREATE_ALWAYS = 2;
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 WriteFile
(
System.IntPtr hFile, // handle to file
void* pBuffer, // data buffer
int NumberOfBytesToWrite, // number of bytes to write
int* pNumberOfBytesWirtten, // number of bytes written
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_WRITE,
0,
0,
CREATE_ALWAYS,
0,
0
);
if (handle != System.IntPtr.Zero)
{
return true;
}
else
{
return false;
}
}
public unsafe int Write(byte[] buffer, int index, int count)
{
int n = 0;
fixed (byte* p = buffer)
{
if (!WriteFile(handle, p + index, count, &n, 0))
{
return 0;
}
}
return n;
}
public bool Close()
{
return CloseHandle(handle);
}
/*End Part1*/
/*Part2: Test writing */
private void WriteFile()
{
string curFile = @"U:\mytest\testfile.txt";
string teststr = "Wirte here for testing";
byte[] buffer = System.Text.Encoding.UTF8.GetBytes(teststr);
if (Open(curFile))
{
int bytesWrite;
bytesWrite = Write(buffer, 0, buffer.Length);
System.Diagnostics.Debug.WriteLine("Write bytes count:{0}", bytesWrite);
Close();
}
else
{
System.Diagnostics.Debug.WriteLine("Failed to open requested file");
}
}
/*End Part2*/
注意:这里有一些不安全的代码可能不会发布到商店。但是如果你只是在 Windows IoT core 上使用它就不会打扰你。
我正在使用 raspberry pi 2 mod b 和最新的 Windows 物联网版本创建者更新。我创建了在监视器上显示数据并部署在 Pi 上的应用程序。它在 Pi 上显示 UI。我需要将这些数据保存在 Pi 存储上的文本文件中,但我无法做到这一点。
有人请帮助并提供在 C# 中使用 win 10 iot 在 Pi 存储上创建文本文件的详细信息或代码。
我尝试了以下方法,但没有成功。
要访问可移动存储,您需要像这样添加相关功能:
访问SD卡U盘(OS图像卡)需要set folder permissions for UWP app这样:
FolderPermissions U:\mytest -e
利用 PInvoke 并使用 WIN32 API CreateFile 和 WriteFile 来访问 TXT 文件。要使用这些 API,您需要在项目属性中启用不安全代码,如下所示:
这是您可以参考的示例。
/*Part1: preparation for using Win32 apis*/
const uint GENERIC_WRITE = 0x40000000;
const uint CREATE_ALWAYS = 2;
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 WriteFile
(
System.IntPtr hFile, // handle to file
void* pBuffer, // data buffer
int NumberOfBytesToWrite, // number of bytes to write
int* pNumberOfBytesWirtten, // number of bytes written
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_WRITE,
0,
0,
CREATE_ALWAYS,
0,
0
);
if (handle != System.IntPtr.Zero)
{
return true;
}
else
{
return false;
}
}
public unsafe int Write(byte[] buffer, int index, int count)
{
int n = 0;
fixed (byte* p = buffer)
{
if (!WriteFile(handle, p + index, count, &n, 0))
{
return 0;
}
}
return n;
}
public bool Close()
{
return CloseHandle(handle);
}
/*End Part1*/
/*Part2: Test writing */
private void WriteFile()
{
string curFile = @"U:\mytest\testfile.txt";
string teststr = "Wirte here for testing";
byte[] buffer = System.Text.Encoding.UTF8.GetBytes(teststr);
if (Open(curFile))
{
int bytesWrite;
bytesWrite = Write(buffer, 0, buffer.Length);
System.Diagnostics.Debug.WriteLine("Write bytes count:{0}", bytesWrite);
Close();
}
else
{
System.Diagnostics.Debug.WriteLine("Failed to open requested file");
}
}
/*End Part2*/
注意:这里有一些不安全的代码可能不会发布到商店。但是如果你只是在 Windows IoT core 上使用它就不会打扰你。