Visual c++ 在Visual C++;
我试图“简化”一段很好的示例代码,该代码的超链接位于该消息的末尾,用于指定目录字符串,而不是将其作为命令行参数传递。简化的代码可以编译和执行,但文件名和大小不是我所期望的:文件名似乎是一个十六进制数,nFileSize.High大于nFileSize.Low(实际文件大小从0到100Mb不等)。我认为我的类型转换可能引入了错误。有什么建议吗Visual c++ 在Visual C++;,visual-c++,directory-listing,Visual C++,Directory Listing,我试图“简化”一段很好的示例代码,该代码的超链接位于该消息的末尾,用于指定目录字符串,而不是将其作为命令行参数传递。简化的代码可以编译和执行,但文件名和大小不是我所期望的:文件名似乎是一个十六进制数,nFileSize.High大于nFileSize.Low(实际文件大小从0到100Mb不等)。我认为我的类型转换可能引入了错误。有什么建议吗 #include "stdafx.h" #include <iostream> #include <fstream> #includ
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <string>
#include <cctype>
#include <bitset>
#include <sstream>
#include <windows.h>
#include <tchar.h>
#include <stdio.h>
#include <strsafe.h>
#pragma comment(lib, "User32.lib")
using namespace std;
using namespace System; //set common language runtime support to /clr
int main()
{
WIN32_FIND_DATA ffd;
LARGE_INTEGER filesize;
//TCHAR szDir[MAX_PATH];
//size_t length_of_arg;
HANDLE hFind = INVALID_HANDLE_VALUE;
//DWORD dwError=0;
finstr = "C:\\Users\\MyName\\Documents\\Visual Studio 2010\\Projects\\Data Analysis\\Data Folder\\*";
//Just evaluate the first file before looping over all files
hFind = FindFirstFile((wchar_t*)(finstr.c_str()), &ffd);
wstring wsfname(ffd.cFileName);
string newtemp(wsfname.begin(), wsfname.end());
cout << "1st fname = " << ffd.cFileName << " newtemp = "<< newtemp << " nFSizeLo = "<< ffd.nFileSizeLow << " nFSizeHi = "<< ffd.nFileSizeHigh << "\n";
FindClose(hFind);
return 0;
}
#包括“stdafx.h”
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#pragma注释(lib,“User32.lib”)
使用名称空间std;
使用名称空间系统//将公共语言运行时支持设置为/clr
int main()
{
WIN32_查找_数据ffd;
大整数文件大小;
//TCHAR szDir[MAX_PATH];
//参数的大小和长度;
句柄hFind=无效的句柄值;
//DWORD dwError=0;
finstr=“C:\\Users\\MyName\\Documents\\visualstudio 2010\\Projects\\Data Analysis\\Data Folder\\*”;
//在循环所有文件之前,只需计算第一个文件
hFind=FindFirstFile((wchar_t*)(finstr.c_str()),&ffd);
wstring wsfname(ffd.cFileName);
字符串newtemp(wsfname.begin(),wsfname.end());
我想您在字符串转换中可能有问题。请尝试:1.wstring wsfname(CT2A(ffd.cFileName,CP_UTF8));
2.删除下一行3.将cout
替换为wcout
并改用wsfname
。使其成为wstring finstr=L“C:\\Users…”
(注意L
前缀)并在FindFirstFile
调用中删除强制转换:FindFirstFile(finstr.c_str(),&ffd)
。一般来说,避免混合和匹配窄字符串和宽字符串;尽可能使用Unicode。您的FindFirstFile
调用失败,但您不知道这一点,因为您没有检查其返回值。然后检查未初始化的ffd
中碰巧存在的随机垃圾,我认为您在stri正在转换。尝试:1.wstring wsfname(CT2A(ffd.cFileName,CP_UTF8));
2.删除下一行3.将cout
替换为wcout
,并改用wsfname
。使其成为wstring finstr=L“C:\\Users…”;
(注意L
前缀)并在FindFirstFile
调用中删除强制转换:FindFirstFile(finstr.c_str(),&ffd)
。通常,避免混合和匹配窄字符串和宽字符串;尽可能使用Unicode。您的FindFirstFile
调用失败,但您不知道这一点,因为您没有检查它的返回值。然后检查未初始化的ffd