首页 新闻 会员 周边

c#乱码问题

0
[已解决问题] 解决于 2015-04-28 13:47

我用c++做了一个负责找文件并把文件路径写入一个文件储存,再用c#读取结果中文全部变为乱码

 1 using System;
 2 using System.Collections.Generic;
 3 using System.ComponentModel;
 4 using System.Data;
 5 using System.Drawing;
 6 using System.Linq;
 7 using System.Text;
 8 using System.Windows.Forms;
 9 using System.Runtime.InteropServices;
10 using System.IO;
11 
12 namespace WindowsFormsApplication3
13 {
14     public partial class Form1 : Form
15     {
16         [DllImport("F:\\FildFile.dll")]
17         private static extern void findfiler(int classfile); 
18         
19         public Form1()
20         {
21             InitializeComponent();
22         }
23 
24         
25         private void button1_Click(object sender, EventArgs e)
26         {
27             findfiler(2);
28             StreamReader re = new StreamReader(new FileStream("F:\\mp3list.data", FileMode.Open));
29             while(!re.EndOfStream){
30                 listBox1.Items.Add(re.ReadLine().ToString());
31             }
32             re.Close();
33         }
34 
35         private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
36         {
37             axWindowsMediaPlayer1.URL = @listBox1.SelectedItem.ToString();
38         }
39     }
40 }

这是C#读的内容

本人刚学程序设计半年,希望多多指点

cnfanghj的主页 cnfanghj | 菜鸟二级 | 园豆:206
提问于:2015-04-28 12:05
< >
分享
最佳答案
0

你的文件存储是啥玩意儿?

奖励园豆:5
Launcher | 高人七级 |园豆:45045 | 2015-04-28 12:30

储存所要文件的路径

cnfanghj | 园豆:206 (菜鸟二级) | 2015-04-28 12:36

@SetFont: 我就是问你文件的路径你如何存储的?也就是你的存储设施是啥?

Launcher | 园豆:45045 (高人七级) | 2015-04-28 12:37

@Launcher: 本地硬盘,用c++做的dll,就是音乐播放器,用于扫描电脑内的mp3文件,然后把所有路径写入这个文件

cnfanghj | 园豆:206 (菜鸟二级) | 2015-04-28 12:41

@SetFont: 你用 C++ 创建的文件设置 BOM 信息了吗?在你的 C++ 代码中路径字符串使用的是宽字符,还是多字节?你写入文件时是写入的 RAW 字符串,还是使用了编码?

Launcher | 园豆:45045 (高人七级) | 2015-04-28 12:43

@Launcher: 这个不是很清楚,希望指点

cnfanghj | 园豆:206 (菜鸟二级) | 2015-04-28 12:44

@SetFont: 把代码贴出来

Launcher | 园豆:45045 (高人七级) | 2015-04-28 12:45

@Launcher: 

  1 // FildFile.cpp : Defines the entry point for the DLL application.
  2 //
  3 
  4 #include "stdafx.h"
  5 extern "C" _declspec(dllexport)void _stdcall findfiler(int classfile);
  6 
  7 
  8 BOOL APIENTRY DllMain( HANDLE hModule, 
  9                        DWORD  ul_reason_for_call, 
 10                        LPVOID lpReserved
 11                      )
 12 {
 13     switch (ul_reason_for_call)
 14     {
 15         case DLL_PROCESS_ATTACH:
 16         case DLL_THREAD_ATTACH:
 17         case DLL_THREAD_DETACH:
 18         case DLL_PROCESS_DETACH:
 19             break;
 20     }
 21     return TRUE;
 22 }
 23 
 24 
 25 void FindFile(char* pfilename,char* pfilter,FILE *filepointer);//自定义函数声明 
 26 int count=0;                                 //统计文件数
 27 char fname[32];                              //存储输入文件名 
 28 #define BUFSIZE 256                          //驱动器名称存放缓冲区大小 
 29 
 30 
 31 void _stdcall findfiler(int classfile)
 32 {
 33     char szLogicalDriveStrings[BUFSIZE];
 34     int iSub;                                     //驱动器数组偏移读取
 35     DWORD iLength;                               //驱动器数组长度
 36     
 37     switch(classfile){
 38         case 1:strcpy(fname,"exe");break;
 39         case 2:strcpy(fname,"mp3");break;
 40         case 3:strcpy(fname,"data");break;
 41         case 4:strcpy(fname,"txt");break;
 42         case 5:strcpy(fname,"mp4");break;
 43         case 6:strcpy(fname,"jpg");break;
 44         case 7:strcpy(fname,"rmvb");break;
 45         case 8:strcpy(fname,"cs");break;
 46         case 9:strcpy(fname,"cpp");break;
 47         case 10:strcpy(fname,"jpeg");break;
 48     }
 49 
 50     char filetitle[50]="F:\\";         //保存文件名
 51     strcat(filetitle,fname);       
 52     strcat(filetitle,"list.data");    
 53     FILE *fp;                                           //新建文件指针
 54     if((fp=fopen(filetitle,"a+"))==NULL)return;
 55 
 56     ZeroMemory(szLogicalDriveStrings, BUFSIZE);         //清空缓冲内存 
 57     iLength = GetLogicalDriveStringsA(BUFSIZE-1, szLogicalDriveStrings);
 58     for(iSub=0; iSub<iLength; iSub+=4) 
 59     {
 60         if(GetDriveType(szLogicalDriveStrings+iSub)!=3)continue;
 61         FindFile(szLogicalDriveStrings+iSub,"*.*",fp);
 62     }
 63     fprintf(fp,"%d",count);
 64     fclose(fp);
 65 
 66     return;
 67 }
 68 
 69 void FindFile(char* pfilename,char* pfilter,FILE *filepointer)
 70 {
 71     WIN32_FIND_DATA findfiledate;
 72     HANDLE hfind;
 73     char filename[512];
 74     char lpFileName[512];
 75     char _lpFileName[512];
 76     int i;
 77     int result;
 78     for(i=0;*(pfilename+i)!='\0';i++)filename[i]=*(pfilename+i);
 79     
 80     filename[i]='\0'; //如果最后一个字符不是'\'
 81    
 82     if(filename[strlen(filename)-1]!='\\') 
 83         strcat(filename,"\\"); //添加'\'
 84     strcpy(lpFileName,filename);
 85     strcat(lpFileName,pfilter);
 86     hfind=FindFirstFile(lpFileName,&findfiledate);
 87     if(hfind==INVALID_HANDLE_VALUE) return;
 88 
 89     char tm[512];
 90     
 91     do
 92     {
 93         //如果不是目录
 94         if(!(findfiledate.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY))
 95         {
 96             //如果找到指定文件
 97             strcpy(tm,strlen(findfiledate.cFileName)+findfiledate.cFileName-3);
 98             if(0==strcmp(fname,tm))
 99            { 
100                 fprintf(filepointer,"%s\n",findfiledate.cFileName);
101                 fprintf(filepointer,"%s%s\n",filename,findfiledate.cFileName);
102                 count++;
103             }
104         }
105         //如果是目录
106         else
107         {
108             //.和..不输出
109             if(findfiledate.cFileName[0]!='.')
110             {
111                 strcpy(_lpFileName,filename);
112                 strcat(_lpFileName,findfiledate.cFileName);
113                 FindFile(_lpFileName,pfilter,filepointer);  //递归
114             }
115         }
116     }while(FindNextFile(hfind,&findfiledate));//FindNextFile返回为真,继续搜索
117 
118     FindClose(hfind);
119     return;
120 }
cnfanghj | 园豆:206 (菜鸟二级) | 2015-04-28 12:51

@SetFont: C# 中怎么读的?

Launcher | 园豆:45045 (高人七级) | 2015-04-28 13:12

@Launcher: 在最上面

cnfanghj | 园豆:206 (菜鸟二级) | 2015-04-28 13:16

@SetFont: C++ 代码编译的字符集选项修改为 UNICODE,然后在 C++ 代码中将 char 都替换为 TCHAR。

Launcher | 园豆:45045 (高人七级) | 2015-04-28 13:19

@Launcher: 嗯嗯  谢谢  等我上完课我就去看看

cnfanghj | 园豆:206 (菜鸟二级) | 2015-04-28 13:21
其他回答(1)
-1

你用C++读读看会不会乱码。

爱编程的大叔 | 园豆:30839 (高人七级) | 2015-04-28 12:13

不会

支持(0) 反对(0) cnfanghj | 园豆:206 (菜鸟二级) | 2015-04-28 12:36
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册