⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 textfile.c

📁 另外一个简单的算术编码压缩程序 可以压缩10个字符 供大家参考
💻 C
📖 第 1 页 / 共 2 页
字号:
					    iFileLength = GetWindowTextLength (hWndEdit);
						lpBuffer = (LPTSTR) malloc ((iFileLength + 1) * sizeof (TCHAR));
     
					    if (!lpBuffer)  //申请数据缓冲区失败
						{
					        CloseHandle (hFile);
							return 0;
						}
						
						GetWindowText (hWndEdit, lpBuffer, iFileLength + 1);
						WriteFile (hFile, lpBuffer, iFileLength * sizeof (TCHAR), 
									&dwBytes, NULL);
     
						CloseHandle (hFile) ;
						free (lpBuffer) ;
						
						if ((iFileLength * sizeof (TCHAR)) != (int) dwBytes)
						{
							MessageBox (hWnd, TEXT ("文件写入操作失败"),
								TEXT ("文件操作演示程序"), MB_OK | MB_ICONERROR);
							return 0;
						}
						else
						{
							wsprintf (szWndCaption, TEXT ("%s - %s"), 
								(szFileTitle[0] == '\0') ? UNTITLED : szFileTitle, szAppName);
							SetWindowText (hWnd, szWndCaption) ;

							bFileChange = FALSE;
							return 1;
						}
					}
				}

			case IDM_FILE_SAVEAS:
				//设置对话框结构变量ofn
				ofn.hwndOwner         = hWnd;
				ofn.lpstrFile         = szFileName;
				ofn.lpstrFileTitle    = szFileTitle;
				ofn.Flags             = OFN_OVERWRITEPROMPT;
     
				//显示“另存为”对话框
				if (GetSaveFileName (&ofn))
				{
					SendMessage (hWnd, WM_COMMAND, IDM_FILE_SAVE, 0);
				}
				else
				{
					MessageBox (hWnd, TEXT ("获取文件名失败"),
						TEXT ("文件操作演示程序"), MB_OK | MB_ICONERROR);
				}

				return 0;       
				
			case IDM_EDIT_YA:
				{

				int b[N];
				double a[N][2];
				double d=1.0/N;
				int i,j,g,p;

				char c;
				int k;
				int sumn=0,sumb=0;
				double range,subran;

				double h;

				//设置对话框结构变量ofn
				ofn.hwndOwner         = hWnd;
				ofn.lpstrFile         = szFileName;
				ofn.lpstrFileTitle    = szFileTitle;
				ofn.Flags             = OFN_HIDEREADONLY | OFN_CREATEPROMPT ;
     
				//显示“打开”对话框
				if (GetOpenFileName (&ofn))
				{
					//打开指定文件
					hFile = CreateFile (szFileName, GENERIC_READ, FILE_SHARE_READ,
                                NULL, OPEN_EXISTING, 0, NULL);
					if ((DWORD)hFile == -1)
					{
						MessageBox (hWnd, TEXT ("打开指定文件操作失败"),
							TEXT ("文件操作演示程序"), MB_OK | MB_ICONERROR);
						szFileName[0]  = '\0';
						szFileTitle[0] = '\0';
					}
					else  //读取文件内容
					{
						iFileLength = GetFileSize (hFile, NULL);

						lpBuffer = (LPTSTR)malloc (iFileLength+1);
						ReadFile (hFile, lpBuffer, iFileLength, &dwBytes, NULL);
						CloseHandle (hFile);
						lpBuffer[iFileLength] = '\0';
						for(i=0;i<N;i++)
						{
							b[i]=1;
							a[i][0]=d*i;
							a[i][1]=d*(i+1);
						}
						for(i=0;i<iFileLength;i++)
						{
							c=lpBuffer[i];							
							k=c-'a';
							b[k]+=1;
							for(j=0;j<N;j++)
								sumn+=b[j];
							range=a[k][1]-a[k][0];
							subran=range/sumn;
							a[0][0]=a[k][0];
							a[N-1][1]=a[k][1];
							for(g=0;g<N;g++)
							{
								h=a[0][0]+subran*sumb;
								a[g][0]=h;
								sumb+=b[g];
							}
							sumb=0;
							for(p=0;p<N;p++)
							{	
								sumb+=b[p];
								h=a[0][0]+subran*sumb;
								a[p][1]=h;
							}
							sumb=0;
							sumn=0;
						}
					}
						free (lpBuffer);
						MessageBox (hWnd, TEXT ("压缩完毕,请存盘..."),
										TEXT ("数据压缩程序"), MB_OK | MB_ICONINFORMATION);						//设置对话框结构变量ofn
						ofn.hwndOwner         = hWnd;
						ofn.lpstrFile         = szFileName;
						ofn.lpstrFileTitle    = szFileTitle;
						ofn.Flags             = OFN_OVERWRITEPROMPT;
     
						//显示“另存为”对话框
						if (GetSaveFileName (&ofn))
						{
							hFile = CreateFile (szFileName, GENERIC_WRITE, 0, 
											NULL, CREATE_ALWAYS, 0, NULL);
							c=iFileLength;
							WriteFile (hFile, &c, sizeof (char), 
									&dwBytes, NULL);

							WriteFile (hFile, &a[k][0], sizeof (double), 
									&dwBytes, NULL);
							CloseHandle (hFile) ;
						}
						else
						{
							MessageBox (hWnd, TEXT ("获取文件名失败"),
								TEXT ("文件操作演示程序"), MB_OK | MB_ICONERROR);
						}
					}
				}
				return 0;        
			case IDM_EDIT_JIE:
				{
				double result;
				int b[N];
				double a[N][2];
				double d=1.0/N;
				int i,top,j,p,k,g;
				double range,subran,h;
				int sumn=0,sumb=0;
				char c;

				//设置对话框结构变量ofn
				ofn.hwndOwner         = hWnd;
				ofn.lpstrFile         = szFileName;
				ofn.lpstrFileTitle    = szFileTitle;
				ofn.Flags             = OFN_HIDEREADONLY | OFN_CREATEPROMPT ;
     
				//显示“打开”对话框
				if (GetOpenFileName (&ofn))
				{
					//打开指定文件
					hFile = CreateFile (szFileName, GENERIC_READ, FILE_SHARE_READ,
                                NULL, OPEN_EXISTING, 0, NULL);
					if ((DWORD)hFile == -1)
					{
						MessageBox (hWnd, TEXT ("打开指定文件操作失败"),
							TEXT ("文件操作演示程序"), MB_OK | MB_ICONERROR);
						szFileName[0]  = '\0';
						szFileTitle[0] = '\0';
					}
					else  //读取文件内容
					{
						ReadFile (hFile, &c, sizeof(char), &dwBytes, NULL);
						iFileLength=c;
						lpBuffer = (LPTSTR)malloc (iFileLength+1);
						ReadFile (hFile, &result, sizeof(double), &dwBytes, NULL);
						CloseHandle (hFile);
					}
				}
					for(i=0;i<N;i++)
					{
						b[i]=1;
						a[i][0]=d*i;
						a[i][1]=d*(i+1);
					}
					for(top=0;top<iFileLength;top++)
					{
						for(k=0;k<N;k++)
						{
							if(result>=a[k][0] && result<a[k][1])
								break;
						}
						b[k]+=1;
						c=k+'a';
						lpBuffer[top]=c;
						for(j=0;j<N;j++)
							sumn+=b[j];
						range=a[k][1]-a[k][0];
						subran=range/sumn;
						a[0][0]=a[k][0];
						a[N-1][1]=a[k][1];

						for(g=0;g<N;g++)
						{
							h=a[0][0]+subran*sumb;
							a[g][0]=h;
							sumb+=b[g];
						}
						sumb=0;
						for(p=0;p<N;p++)
						{	
							sumb+=b[p];
							h=a[0][0]+subran*sumb;
							a[p][1]=h;
						}
						sumb=0;
						sumn=0;
					}	
					lpBuffer[iFileLength] = '\0';
					SetWindowText (hWndEdit, lpBuffer);
					free(lpBuffer);
				}
				return 0;        
			case IDM_HELP_ABOUT:
		        MessageBox (hWnd, TEXT ("请输入十个以内小写英文字母,存盘后再进行压缩!"),
	                        TEXT ("关于数据压缩演示程序"), MB_OK | MB_ICONINFORMATION);
				return 0;
		}
		return 0;

     case WM_CLOSE:
          if (!bFileChange || IDCANCEL != QuerySaveFile (hWnd, szFileTitle))
               DestroyWindow (hWnd) ;
          
          return 0 ;

	 case WM_DESTROY: 
		PostQuitMessage (0);
		return 0;
	}
	}

	return DefWindowProc (hWnd, message, wParam, lParam);

} //函数 MainWndProc 结束



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -