Windows で互換性のない文字列
ファイル名を付ける場合、Windows ファイル システムと互換性のない文字列の使用を避けてください。
<(それ以下)
>(それ以上)
:(コロン)
"(二重引用符)
|(垂直線)
?(クエスチョンマーク)
*(星印)
.(ピリオド)またはファイル名やフォルダ名の末尾の空白
あとスラッシュ、バックスラッシュかな
Windows で互換性のない文字列
ファイル名を付ける場合、Windows ファイル システムと互換性のない文字列の使用を避けてください。
<(それ以下)
>(それ以上)
:(コロン)
"(二重引用符)
|(垂直線)
?(クエスチョンマーク)
*(星印)
.(ピリオド)またはファイル名やフォルダ名の末尾の空白
あとスラッシュ、バックスラッシュかな
Imports System.Threading ... Private mtx As New Mutex .... '排他開始 mtx.WaitOne() ... '排他完了 mtx.ReleaseMutex()
APIで発注してもよくエラーでる。
うっかり高頻度にアクセスするとIPでBANされるらしく
403エラーしか返ってこなくなる。
そのときはIPを変えると解決するけど。
502 Bad gatewayや504 Gateway Time-out対策もいるよ
便利なのが消えちゃってたので、別案
Excel 2013から追加されている「WEBSERVICE」関数でwebデータとってきて、
「FILTERXML」関数(XPathが使える)と組み合わせて、個別のデータを手軽に取得できます。
https化を試みる。
サーバー管理画面から無料SSL証明書(Let's Encrypt)をインストール。
クリックするだけで簡単。
以下URL参照
※ちなみにさくらインターネットの場合は
サーバーコントロール>ドメイン/SSL設定で
対応したいドメインのSSLの欄にある証明書の列の「登録」をクリックして無料SSL証明書のほうを選択する。
.htaccessに以下の記述
RewriteEngine on RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://sample.com/$1 [R=301,L]
POSTデータがPOSTとして転送されないみたい。
でもGoogle的には301と思って処理してくれてる?
ネタ元
詳しくは以下URL参照
証明書の設定済んでるならプラグイン入れて有効化するだけで対応できるから楽。
こんな一文があるので.htaccessで301リダイレクトさせてると証明書更新失敗するのかな? 様子見てみる。
※1 無料SSL証明書は当サーバで稼働している限り自動延長されますが 以下の場合自動延長が失敗します。事前にご確認下さい。 ・ウェブサイトが当サーバで稼働していない ・.htaccessやmod_rewriteなどを利用してリダイレクトさせている場合 ・アクセス制限をしている場合 ・弊社提供のサブドメインを利用している場合
OFN_ALLOWMULTISELECTを設定すると複数のファイルが選択できるようになります。
しかし、これだけではたくさんファイルを選択すると不具合が発生します。
これはファイル名を受け取るバッファがデフォルトのままでは少ないため記憶できる限界を超えてしまうからです。
なので0初期化した大きいバッファを用意して渡してあげる必要があります。
FileDialog dlg(TRUE, NULL, NULL, OFN_FILEMUSTEXIST | OFN_ALLOWMULTISELECT | //ファイルを複数設定させる為のフラグ OFN_HIDEREADONLY, _T("すべてのファイル(*.*)|*.*||")); char szFileNameBuffer[10000] = {0}; // ファイル名を保存させる為のバッファ dlg.m_ofn.lpstrFile = szFileNameBuffer; // バッファの割り当て dlg.m_ofn.nMaxFile = 10000; // 最大文字数の設定 if(dlg.DoModal() == IDOK) { POSITION pos = dlg.GetStartPosition(); while(pos) { AfxMessageBox(dlg.GetNextPathName(pos)); } }
MFCでは正規表現のライブラリ無いけど標準のほうを使えば使える。
C++11で名前空間がtr1からstdになってるらしいので新しい環境ならそれに置き換えてね
#include <iostream> #include <string> #include <regex> ... std::tr1::regex regPattern(strPattern); std::tr1::match_results<const char *> results; regex_search(strText.GetBuffer(), results, regPattern, std::tr1::regex_constants::match_default); CString resultString = ""; std::tr1::match_results<const char *>::const_iterator it = results.begin(); while (it != results.end()) { if (it->matched) { std::string tmp; tmp = it->str(); resultString.Format("%s",tmp.c_str()); } it++; }
/*-------------------------------------------------------------------------------/ 関数名:void FindAllFile(LPCTSTR pstrName, CListBox &listbox, BOOL bFolder) 引 数:pstrName 検索するファイルの名前が入っている文字列へのポインタ。 listbox ファイル名を格納するCListBoxの参照。 bFolder TRUEにするとフォルダ名もリストに登録。 解 説:ディレクトリ内のファイルを全て検索しリストボックスに登録。 /-------------------------------------------------------------------------------*/ void FindAllFile(LPCTSTR pstrName, CListBox &listbox, BOOL bFolder) { CFileFind fnd; if(fnd.FindFile(pstrName, 0)) { int i = 1; while(i) { i = fnd.FindNextFile(); // 処理が長くなった時の為の対策。 MSG msg; if(::PeekMessage(&msg, (HWND)NULL, 0, 0, PM_REMOVE)) { ::TranslateMessage(&msg); ::DispatchMessage(&msg); } // ファイル名が"."か".."の場合。 if(fnd.IsDots()) continue; // フォルダだった場合。 if(fnd.IsDirectory()) { CString strFindFile = pstrName; strFindFile.Insert(strFindFile.ReverseFind('\\') + 1, fnd.GetFileName() + _T("\\")); // 再帰呼び出し。 FindAllFile(strFindFile, listbox, bFolder); if(!bFolder) continue; } // ファイル名の取得・設定 CString strFilePath = pstrName; strFilePath = strFilePath.Left(strFilePath.ReverseFind('\\') + 1); listbox.AddString(strFilePath + fnd.GetFileName()); } fnd.Close(); } }
使用例
// Cドライブのファイルとフォルダ全てをリストボックスに設定します。 char *findfile = _T("c:\*.*"); FindAllFile(findfile, m_listbox, TRUE); // m_listboxはリストボックスのメンバ変数