月度归档: 2016 年 4 月

  • asp.net core显示环境信息

    在razor中添加如下代码,即可在页面显示服务器的环境信息。

    @inject Microsoft.Extensions.PlatformAbstractions.IRuntimeEnvironment env
    <html>
        <body>
            <img src="images/ASP-NET-Banners-01.png" />
            @("Hello World")
            <footer>
                <div class="container text-center">
                    &copy;@DateTime.Now.Year  <a href="http://www.lwbj.cn">老吴笔记</a> Powered by @($"dotnet-{env.RuntimeType.ToLower()}-{env.RuntimeVersion} on {env.OperatingSystem}")
                </div>
            </footer>
        </body>
    </html>
  • tar打包目录

    tar打包目录

    打包 tar -czf default.tar.gz default

    解压 tar -xvf xxx.tar.gz

  • VC获取程序所在的目录

    VC获取程序所在的目录

    CString  GetCurDir()
    {
                     char   sDrive[_MAX_DRIVE ];
                     char   sDir[_MAX_DIR ];
                     char   sFilename[_MAX_FNAME ], Filename[_MAX_FNAME];
                     char   sExt[_MAX_EXT ];
                     GetModuleFileName(AfxGetInstanceHandle(), Filename, _MAX_PATH);
                     _tsplitpath(Filename, sDrive, sDir, sFilename, sExt);
                     CString   homeDir(CString (sDrive) + CString(sDir));
                     int   nLen = homeDir.GetLength();
    
                     if (homeDir.GetAt(nLen - 1)!= '\\' )
                    {
                                    homeDir += '\\' ;
                    }
    
                     return homeDir;
    }
  • VC++获取控制台命令的输出结果

    VC++获取控制台命令的输出结果

    #include "stdafx.h"
    
    #include <Windows.h>
    #include <iostream>
    #include <string>
    using namespace std;
    
    BOOL ExecDosCmd(string cmd, string &output)
    {
        SECURITY_ATTRIBUTES sa;
        HANDLE hRead, hWrite;
    
        sa.nLength = sizeof(SECURITY_ATTRIBUTES);
        sa.lpSecurityDescriptor = NULL;
        sa.bInheritHandle = TRUE;
        if (!CreatePipe(&hRead, &hWrite, &sa, 0))
        {
            return FALSE;
        }
        char command[1024]; // 长达1K的命令行,够用了吧
        strcpy(command, "Cmd.exe /C ");
        strcat(command, cmd.c_str());
        STARTUPINFO si;
        PROCESS_INFORMATION pi;
        si.cb = sizeof(STARTUPINFO);
        GetStartupInfo(&si);
        si.hStdError = hWrite;  // 把创建进程的标准错误输出重定向到管道输入
        si.hStdOutput = hWrite; // 把创建进程的标准输出重定向到管道输入
        si.wShowWindow = SW_HIDE;
        si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
        // 关键步骤,CreateProcess函数参数意义请查阅MSDN
        if (!CreateProcess(NULL, command, NULL, NULL, TRUE, NULL, NULL, NULL, &si, &pi))
        {
            CloseHandle(hWrite);
            CloseHandle(hRead);
            return FALSE;
        }
        CloseHandle(hWrite);
    
        char buffer[4096] = {0}; // 用4K的空间来存储输出的内容,只要不是显示文件内容,一般情况下是够用了。
        DWORD bytesRead;
        while (true)
        {
            if (ReadFile(hRead, buffer, 4095, &bytesRead, NULL) == NULL)
                break;
            // buffer中就是执行的结果,可以保存到文本,也可以直接输出
            // AfxMessageBox(buffer);   //这里是弹出对话框显示
            // cout << "----:" << endl << buffer << endl;
        }
        CloseHandle(hRead);
    
        output = buffer;
        return TRUE;
    }
    
    int main()
    {
        string output;
        ExecDosCmd("wmic diskdrive get Caption,SerialNumber", output);
        cout << output << endl;
        return 0;
    }
  • C++获取windows系统分区大小及使用情况

    C++使用Windows SDK获取系统分区大小以及使用情况,代码如下:

    // ConsoleApplication1.cpp : 定义控制台应用程序的入口点。
    //
    #include "stdafx.h"
    
    #include <stdint.h>
    #include <windows.h>
    #include <iostream>
    #include <string>
    
    using namespace std;
    
    void TestDrive()
    {
        cout << "TestDrive" << endl;
        char* lpDrives = (char *)malloc(MAX_PATH * sizeof(char ));
        memset(lpDrives, 0, MAX_PATH * sizeof (char));
    
        DWORD dwLen = ::GetLogicalDriveStringsA(MAX_PATH, lpDrives);
        cout << "dwLen: " << dwLen << endl;
    
        DWORD driver_number = dwLen / 4;
        cout << "driver_number: " << driver_number << endl;
    
        string driver;
        LPTSTR start;
        for (DWORD nIndex = 0; nIndex < driver_number; nIndex++)
        {
            start = lpDrives + nIndex * 4;
            cout << "........................................." << endl;
            driver.append(start);
            cout << "lpDrives + nIndex * 4: " << lpDrives + nIndex * 4 << endl;
            cout << "DRIVE_REMOVABLE: " << DRIVE_REMOVABLE << endl;
            cout << "::GetDriveType(lpDrives + nIndex * 4): " << :: GetDriveType(lpDrives + nIndex * 4) << endl;
            if (::GetDriveType (start) == DRIVE_REMOVABLE)
            {
                driver.append(start);
                if (GetVolumeInformation (start, 0, 0, 0, 0, 0, 0, 0)) //判断驱动是否准备就绪
                {
                    cout << "驱动准备就绪 " << endl;
                }
            }
            uint64_t lpFreeBytesAvailable = 0;
            uint64_t lpTotalNumberOfBytes = 0;
            uint64_t lpTotalNumberOfFreeBytes = 0;
            GetDiskFreeSpaceExA(lpDrives + nIndex * 4,
                                (PULARGE_INTEGER)&lpFreeBytesAvailable,
                                (PULARGE_INTEGER)&lpTotalNumberOfBytes,
                                (PULARGE_INTEGER)&lpTotalNumberOfFreeBytes);
            cout << "lpFreeBytesAvailable: " << lpFreeBytesAvailable << endl;
            cout << "lpTotalNumberOfBytes: " << lpTotalNumberOfBytes << endl;
            cout << "lpTotalNumberOfFreeBytes: " << lpTotalNumberOfFreeBytes << endl;
        }
        std::cout << "driver: " << driver << endl;
    }
    
    int main(int argc, char *argv[])
    {
        TestDrive();
        return 0;
    }