bool b = true;
List list = PrinList();
foreach (IntPtr intPtr in list)
{
FileStream fs = new FileStream(intPtr, FileAccess.ReadWrite, true);
StreamWriter sw = new StreamWriter(fs, Encoding.Default); //写数据
b = PrinTable(ds, sw);
fs.Close();
}
return b;
出了错误:句柄不支持异步操作。可能需要更改 FileStream 构造函数的参数,以指示此句柄是以同步方式打开的(即不是为重叠 I/O 打开)。
PrinTable怎么写的,你的intptr怎么获取的
获取IntPtr
private List PrinList()
{
List list = new List();
SelectQuery selectQuery = new SelectQuery("Win32_USBHub");
ManagementObjectSearcher searcher = new ManagementObjectSearcher(selectQuery);
string PNPDeviceID = "";
foreach (ManagementObject disk in searcher.Get())
{
PNPDeviceID = disk["PNPDeviceID"] as String;
IntPtr iHandle = CreateFile("\\.\" + PNPDeviceID.Replace('\', '#') + "#{A5DCBF10-6530-11D2-901F-00C04FB951ED}", (uint)FileAccess.ReadWrite, 0, 0, (int)FileMode.Open, 0, 0);
if (iHandle.ToInt32() != -1)
{
list.Add(iHandle);
}
}
return list;
}
写入
private bool PrinTable(DataSet ds, StreamWriter sw)
{
try
{
double sum;
string str = " ";
int strLength = 0;
foreach (DataTable da in ds.Tables)
{
sum = 0;
sw.WriteLine("");
sw.WriteLine("--------------------------------");
sw.WriteLine("单号:" + da.TableName);
sw.WriteLine("桌号:" + (da.Rows.Count > 0 ? da.Rows[0]["desk_no"].ToString() : ""));
sw.WriteLine("日期:" + DateTime.Now);
sw.WriteLine("--------------------------------");
sw.WriteLine("菜品名称 单价 数量");
foreach (DataRow dr in da.Rows)
{
sum += Convert.ToDouble(dr["total_money"]);
strLength = 16 - dr["pro_price"].ToString().Length - dr["pro_num"].ToString().Length - 2;
sw.WriteLine(dr["pro_name"].ToString());
sw.WriteLine(" " + dr["pro_price"] + str.Substring(0, strLength) + dr["pro_num"] + dr["pro_uint"]);
}
sw.WriteLine("--------------------------------");
sw.WriteLine("合计:" + sum);
sw.WriteLine("");
sw.WriteLine("");
sw.WriteLine("");
}
sw.Close();
return true;
}
catch (Exception ex)
{
return false;
}
}